排序 permutation
Posted bencky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 permutation相关的知识,希望对你有一定的参考价值。
习题2-6 排序 permutation
用1,2,3……9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。
我的思路:
既然每个数字只能出现一次,那么就将1-9这九个数字出现的情况做记录,出现了的赋值为1,没有出现的为0。
然后分别对应着abc,def,ghi的百、十、个三位。
最后进行累加,如果累加器结果为9,那么说明每个数字出现了一次,则可以输出,否则不然。
#include "stdio.h"
int main()
{
for(int abc=123;abc<=333;abc++)//确定abc最小值和最大值
{//1-9出现的数字为1,没有出现的为0,累加起来,等于9则正确,否则错误
int s[10]={0}; //定义一个数组记录0~9出现的次数,并且循环前置零,
//防止上一轮出现的1在这一轮没有出现,影响最后累加,导致多加
s[abc/100]=1;//百位 a
s[abc/10%10]=1;//十位 b
s[abc%10]=1;//个位 c
int def=2*abc;//另def为abc的2倍
s[def/100]=1;//百位 d
s[def/10%10]=1;//十位 e
s[def%10]=1;//个位 f
int ghi=3*abc;//另ghi为abc的3倍
s[ghi/100]=1;//百位 g
s[ghi/10%10]=1;//十位 h
s[ghi%10]=1;//个位 i
int count=0;//累加器
for(int i=1;i<=9;i++)//实现1-9的累加计数
count+=s[i];
if(count==9)//如果1-9都出现了,则输出这些组合
printf("%d %d %d
",abc,def,ghi);
}
return 0;
}
以上是关于排序 permutation的主要内容,如果未能解决你的问题,请参考以下文章
AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列