题意:用1,2,3,……9组成3个三位数 abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。
按照”abc def ghi”的格式输出所有解,每行一个解。
这道题也是整数拆分、取整取余问题的基础练习。
关键信息在于“比例=1:2:3”和“都使用一次”。
- 用visit数组标记每个数字是否出现过
- 枚举(abc, def, ghi)可能的取值,将abcdefghi对应的数字元素都标记为true。
- 遍历visit数组,能保证所有数字都出现的组合,即为所求答案。(如果某个数字出现了两次或者出现了0,一定会导致另外某个数字没有出现
-
#include <stdio.h> int main() { int abc, def, ghi; for (abc = 123; abc<=329; ++abc) { bool visit[10] = {false}; //统计0~9是否出现 //标记abc各位 visit[abc/100] = visit[abc/10%10] = visit[abc%10] = true; //标记def各位 def = 2*abc; visit[def/100] = visit[def/10%10] = visit[def%10] = true; //标记ghi各位 ghi = 3*abc; visit[ghi/100] = visit[ghi/10%10] = visit[ghi%10] = true; //检查完全性 bool flag = true; for (int i = 1; i<=9; ++i) if (visit[i] != true) { flag = false; break; } if (flag) printf("%d %d %d ",abc,def,ghi); } return 0; }