第一次发博文,谢谢大家支持!
用 1,2,3…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。
分析:我们可以先直接用暴搜找出符合条件的数。当然,通过题目要求我们可以缩小一下搜索范围。当我们得知abc值,即可通过比列来算出def(abc*2)和ghi(abc*3).那么,我们通过推算得出abc的大致范围(123~329).又由于组成这些数字的约束条件为0~9不重复,所以我们还要进行相关问题解决。解决数字不重复问题,我是通过先将所有产生的数值存入数组中,再进行排序。排好序后,从数组中第一个数开始,将其与后一数比较是否相等,直到数组结束。若存在相同数,则break;反之,打印出来。
#include <cstdio>
int main ()
{
int i,j,k,m,n,t,a[9];
for (i = 123; i <= 329; i++)
{
j = i*2;
k = i*3;
//将生成的数分拆存入数组中
a[0] = i/100;a[1] = i/10%10;a[2] = i%10;
a[3] = j/100;a[4] = j/10%10;a[5] = j%10;
a[6] = k/100;a[7] = k/10%10;a[8] = k%10;
for(m = 0;m < 9;m++) //排序
for(n = m;n < 9;n++)
{
if(a[m] > a[n])
{
t = a[m];
a[m] = a[n];
a[n] = t;
}
}
for(m = 0,n = 1;n < 9;m++,n++)//检查是否有重复数
if(a[m] == a[n]) break;
if (n == 9)
printf ("%d %d %d\n",i,j,k);
}
return 0;
}