用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.

用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解.
#include
#include
int main()
{
int a,b,c,d,e,f,g,h,i;
for(a=1;a
密岁2 1年前 已收到1个回答 举报

背黑锅我来 春芽

共回答了13个问题采纳率:100% 举报

  这道题以前做过,有点印象


  其实这道题就2个地方要注意,也是解题关键


abc:def:ghi=1:2:3
1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次


对于第一个地方,我们可以用1个循环,加3个变量来实现
就是
for(i = 123; i <= 329; i++)
{
j = i * 2;//i的2倍
k = i * 3;//i的3倍
}
i 最小只能是123,最大只能是329(因为最大数字只能是987)


第2个地方的实现,我们可以用数学的方法来实现
9加起来真能是45,9乘起来只能是362880


所以我们可以将前面的i,j,k分别分解出来的9位数字相加,相乘,
看最后的结果是不是45,362880




具体代码
//用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解.

#include

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 %dn", i, j, k);
}
return 0;
}




效果:





PS:若有不明白的地方,

1年前 追问

3

密岁2 举报

大神可以帮我看下我的程序哪里出错了吗,谢谢!
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.029 s. - webmaster@yulucn.com