题目:用1,2,3…,9 组成3个三位数 abc,def 和 ghi,每个数字恰好使用一次,要求 abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋
解答如下:
#include<stdio.h>
int main() {
int a, b, c;
for (int i = 125; i < 329; i++) {
bool flag = 0;
a = i;
b = 2 * i;
c = 3 * i;
if (a % 10 != 0 && b % 10 != 0 && c % 10 != 0) {
if ((a - (a % 10)) % 100 != 0 && (b - (b % 10)) % 100 != 0 && (c - (c % 10)) % 100 != 0) {
int m[9]={a/100,(a-(a/100)*100)/10,a%10,b / 100,(b - (b / 100) * 100) / 10,b % 10, c / 100,(c - (c / 100) * 100) / 10,c % 10, };
for (int n = 0; n < 8; n++) {
for (int k = 1; k < 9 - n; k++) {
if (m[n] == m[n + k]) {
flag = 1;
break;
}
}
if (flag == 1) {
break;
}
}
if (flag == 0) {
printf("%d %d %d\n", a, b, c);
}
}
}
}
return 0;
}
难点主要在于如何使每个数字恰好用一次,这里先用if语句排除有0的情况,再将每个数字存进数组,依次比较,使用到了“冒泡排序”的思想,同时用bool数flag来控制是否跳出循环,比较巧妙。