方法一
//用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
#include <stdio.h>
void
result(
int
num,
int
&result_add,
int
&result_mul)
{
int
i, j, k;
i = num / 100;
//百位
j = num / 10 % 10;
//十位
k = num % 10;
//个位
result_add += i + j + k;
//分解出来的位数相加
result_mul *= i * j * k;
//相乘
}
int
main()
{
int
i, j, k;
int
result_add, result_mul;
for
(i = 123; i <=329; i++)
{
j = i * 2;
k = i * 3;
result_add = 0;
result_mul = 1;
result(i, result_add, result_mul);
result(j, result_add, result_mul);
result(k, result_add, result_mul);
if
(result_add == 45 && result_mul == 362880)
printf
(
"%d %d %d\n"
, i, j, k);
}
return
0;
}
方法二
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
//用1,2,3...9组成3个三位数abc, def, ghi, 每个数字恰好使用一次,且abc:def:ghi=1:2:3,输出所有解。
int n, i, j;
char a[10];
for(n = 123; n < 330; n++){
sprintf(a, "%d", n * 1000000 + n * 2 * 1000 + n * 3);
for(j = 0, i = '1'; i <= '9'; memchr(a, i++, 9) && j++);
if (j == 9) {
printf("%d %d %d \n", n, n * 2, n * 3);
}
}
return 0;
}