用1~9组成3个三位数,每个数字使用一次使得abc:def:ghi=1:2:3,输出所有解

c 语言题目:用1,2,3,……9组成三个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出所有解

abc:def:ghi

138:276:414
139:278:417
143:286:429
148:296:444
1⑥4:328:492
176:352:528
178:356:534
179:358:537
182:364:546
186:372:558
192:384:576
218:436:654
219:438:657
238:476:714
239:478:717
273:546:819
293:586:879
314:628:942
327:654:981
329:658:987

又补充了提问。我就不贴代码了。算法思路就是

从i = 123到i = 987/3 做循环
{
算出i*2、i*3的值
把这三个数的各位共9个数字,加上一个0,放入一长度为10的数组。
设置一个布尔值 = 1
从 k = 0 到 9循环
{
设置一个值F=0
从数组1到10循环
{
某位 == k,则F=F+1
如果F = 2,跳出该循环
}
如果F = 2,布尔值=0,跳出循环
}
如果布尔值 = 1,这个i符合,按格式输出i、i*2、i*3
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-22
#include "stdafx.h"
#include<math.h>
#include<time.h>
int a[9],flag=0;
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=123;i<=329;i++)
{
flag=0;
a[0]=i/100;
a[1]=i/10%10;
a[2]=i%10;
a[3]=i*2/100;
a[4]=i*2/10%10;
a[5]=i*2%10;
a[6]=i*3/100;
a[7]=i*3/10%10;
a[8]=i*3%10;
for(int j=0;j<9;j++)
for(int k=j+1;k<9;k++)
if(a[j]==a[k])
{
flag=1;
break;
}
if(flag==0)printf("%d %d %d\n",i,i*2,i*3);
}
printf("Time used=%.21f\n",(double)clock()/CLOCKS_PER_SEC);
return 0;

}
楼上的前半部分的思路是对的,后面可能出现了问题,正确答案是这9个数都不能相同。
我测试了一下和算法竞赛入门经典的习题答案,发现本答案运行时间远小于。
第2个回答  2011-05-25
用1,2,3,……9组成三个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出所有解
138:276:414
139:278:417
143:286:429
148:296:444
第3个回答  2011-05-25
176:352:528
178:356:534
186:372:558
192:384:576
179:358:537
182:364:546