c语言数学问题,用123456789九个数中每三个拼成一个三位数

使这三个数满足1:2:3的比列
以下是我写的代码,为什么循环在后来直接停止了,求解答
#include<stdio.h>
int main()
{
int i,j,k,a,b,c,d[10],l,e[10]={0,1,2,3,4,5,6,7,8,9};//a为第一个数,b为第二个数,c为第三个数
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
{
if(i==j)continue;
for(k=1;k<=9;k++)
{
if(k==j||k==i)
continue;
a=i*100+j*10+k;
b=2*a;
c=3*a;
if(b>=1000||c>=1000)continue;
d[0]=0;
d[1]=i;
d[2]=j;
d[3]=k;
d[4]=b/100;//求第二个数的百位
d[5]=(b-d[4]*100)/10;//求第二个数的十位
d[6]=(b-d[4]*100-d[5]*10);//求第二个数的个位
d[7]=c/100;//从这求第三个数的个十百
d[8]=(c-d[7]*100)/10;
d[9]=(c-d[7]*100-d[8]*10);
for(i=1;i<=8;i++)//把d中的9个数排序从大到小
{
k=i;
for(j=i+1;j<=9;j++)
if(d[k]>d[j])
k=j;
l=d[i];
d[i]=d[k];
d[k]=l;
}
for(i=1;i<=9;i++)//与预设的数组e比较,如果相同输出
if(d[i]!=e[i])
l=0;
if(l!=0)
printf("%d %d %d\n",a,b,c);
}

}
return 0;
}

就是个深度优先搜索。枚举所有符号可能添加的情况。 { s=0; /*该方式下的和*/ m=1; /*作操作数*/ n=i; /*获取i在3进制下的每一位会破坏i,所以借用变量n来获取*/ op='+'; /*第一次操作方式为+*/ ptr=0; /*指针用来记录运算过程*/ str[ptr++]='1'; /*首先记录一个1*/ for (j=2;j<=9;j++) /*八次循环,每次的下一个操作数是j*/ { if (n%3) /*3进制下的第j-1位数,如果不是0,则要完成先前的操作*/ { if (op=='+') s+=m; else s-=m;m=j; } 这段是在做拆符号的事情,就是根据i的值确定那8个空格填什么 switch(n%3) /*根据这一位的情况进行处理*/ { case 0:m=m*10+j;break; case 1:op='+';break; case 2:op='-';break; } if (n%3) str[ptr++]=op; /*记录运算模式*/ str[ptr++]='0'+j; n/=3; } 就是按照填好的符号,计算表达式的结果然后就是判断是不是是100。追问

你这复制粘贴的什么东西啊...你看题目没有?

温馨提示:答案为网友推荐,仅供参考
相似回答