分析:由于题目要求abc:def:ghi=1:2:3,并且每个数字恰好使用一次,所以ghi的最大值应为987,abc的最大值为987/3=329,所以可以缩小abc的范围,abc最小为123,这样可以很大程度的减少遍历次数,具体见代码,有相应的注释。
#include<stdio.h>
int main(){
int array[9]={0},i,j,k,abc,def,ghi;
int flag;
for(i=123;i<=329;i++){
flag=0;//由于是多次循环,所以每经过一次循环,都要重新赋值
abc=i;
def=2*abc;//根据比例,可以将def和ghi都表示出来
ghi=3*abc;
//接下来是依次把三个数的每一位都分离出来,放在一个一维数组里
array[0]=abc%10;array[1]=abc/10%10;array[2]=abc/100;
array[3]=def%10;array[4]=def/10%10;array[5]=def/100;
array[6]=ghi%10;array[7]=ghi/10%10;array[8]=ghi/100;
//判断数组里是否有重复的数字
for(j=0;j<9;j++){
for(k=0;k<9;k++)
if(j==k) //最开始,j和k都是=0的,后面的也是一样,因此要跳过,第一次就栽到这里了。。。
continue;
else{
if(array[j]==array[k]){
flag=1;break;//一旦找到有重复的数字,立马结束匹配,跳出双重循环
}
else continue;
}
if(flag==1)//这一步是跳出双重循环的关键哦
break;
else continue;
}
if(flag==0)
printf("%d %d %d\n",abc,def,ghi);
else continue;
}
return 0;
}
这是我看过一些解题思路后,自己敲的,可能有些冗杂,所以有自己的想法也可以试着敲一敲,重要的是思路。