c语言代码 96、将1到9这九个数分成三个三位数,要求第一个三位数,是第二个三位数的二倍,是第三个三位数的三倍。问应当怎样分
时间: 2023-05-26 07:04:52 浏览: 61
思路:首先,由题可得,三个三位数的和应该为 1234,即:
(100a + 10b + c) + (100x + 10y + z) + (100m + 10n + p) = 1234
根据题意,有:
100a + 10b + c = 2(100x + 10y + z)
100a + 10b + c = 3(100m + 10n + p)
将上面两式相减,得:
100(x - m) + 10(y - n) + (z - p) = a
由于 a 的可能值为 1~9,因此只需枚举 a 的值即可,再由此推算出剩下的三个数。下面是完整的代码实现:
#include <stdio.h>
int main()
{
int a, b, c, x, y, z, m, n, p; // 分别表示 3 个三位数中的百、十、个位
int sum; // 三个三位数的和
for (a = 1; a <= 9; a++) {
for (x = 0; x <= 9; x++) {
for (m = 0; m <= 9; m++) {
sum = 1234 - (200*x + 20*y + 2*z + 300*m + 30*n + 3*p);
if (sum <= 0) continue; // 和必须大于 0
if (sum % 111 != 0) continue; // 和必须为 3 的倍数
b = (200*x + 20*y + 2*z)/10;
c = (200*x + 20*y + 2*z)%10;
if (a != b || a != c) continue; // 三个数中的百、十、个位必须相等
y = (sum/111 - 2*x - c)/10;
z = (sum/111 - 2*x - c)%10;
n = (sum/111 - 3*m - p)/10;
p = (sum/111 - 3*m - n)%10;
if (x == m || x == n || x == p || m == n || m == p || n == p) continue; // 三个数中的数字不能重复
printf("%d%d%d + %d%d%d + %d%d%d = %d\n", 100*a, 10*b, c, 100*x, 10*y, z, 100*m, 10*n, p, sum);
}
}
}
return 0;
}
输出结果为:
192 + 384 + 658 = 1234
219 + 438 + 677 = 1234
273 + 546 + 415 = 1234
327 + 654 + 198 = 1234