题目:将0到9这十个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的1/2,是第三个3位数的1/3
代码
个人思路:
①由于第一个数最小值是123,最大是333.因此,第二三个数最小分别是246和369.故i j k的初值就分别是123 246和369
②由于三个三位数共9个数字不能重复,故设一个二维数组记录该数是否被访问过,初值为0,访问过为1;
//#include <stdio.h>
#include <math.h>
int main()
{
int q[2][10] = {0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0,0};
int i, j, k; //代表题目要求的三个三位数
int a, b, c, d, e, f, g, h, m; //9个数字代表数组下标,记录某数字是否已被访问过
for (i = 123; i < 334; i++) {
a = i / 100;
b = (i / 10) % 10;
c = i % 10;
q[1][a] = 1;
q[1][b] = 1;
q[1][c] = 1;
for (j = 246; j < 1000; j++) {
d = j / 100;
e = (j / 10) % 10;
f = j % 10;
if ((q[1][d] == 0) && (q[1][e] == 0) && (q[1][f] == 0)) {
q[1][d] = 1;
q[1][e] = 1;
q[1][f] = 1;
for (k = 369; k < 1000; k++) {
g = k / 100;
h = (k / 10) % 10;
m = k % 10;
if ((q[1][g] == 0) && (q[1][h] == 0) && (q[1][m] == 0)) {
q[1][g] = 1;
q[1][h] = 1;
q[1][m] = 1;
if ((i == 2 * j) && (i == 3 * k))
printf("%d,%d,%d\n", i, j, k);
}
}
}
}
}
}
Found
327
654
981