菜鸟请教一个问题:关于XXXX*X=XXXX,这9个数字都不相同
刚开始学C语言,偶然有个猜数字的题目,一个四位数*一个数=一个四位数,这9个数字都不相同。我当时的想法是先算出等号后面的四位数,再除以一个不重复的一个数字,得到等号前的数。
结果也实现了,只是觉得好像比较冗长,不知道各位高手有什么意见,新手发问,不要鄙视我。。
源代码如下:
#include <stdio.h>
main()
{
int a,b,c,d,e,f,g,h,i,j,k;
//a为等号后面的四位数,b,c,d,e为千百十个位,g位等号后的数,h,i,j,k为g的千百十个位,f为乘 数
for(a=1000;a<10000;a++)
{
b=a/1000;
c=(a-1000*b)/100;
d=(a-b*1000-c*100)/10;
e=a-b*1000-c*100-d*10;
if((b!=c)&&(b!=d)&&(b!=e)&&(c!=d)&&(c!=e)&&(d!=e))
{
for(f=1;f<10;f++)
{
if((f!=b)&&(f!=c)&&(f!=d)&&(f!=e))
{
g=a/f;
h=g/1000;
i=(g-1000*h)/100;
j=(g-1000*h-100*i)/10;
k=g-1000*h-100*i-10*j;
if((1000<g)&&(g<9999)&&(g!=a))
{
if((b!=h)&&(b!=i)&&(b!=j)&&(b!=k)&&(c!=h)&&(c!=i)&&(c!=j)&&(c!=k)&&(d!=h)&&(d!=i)&&(d!=j)&&(d!=k)&&(e!=h)&&(e!=i)&&(e!=j)&&(e!=k)&&(f!=h)&&(f!=i)&&(f!=j)&&(f!=k)&&(h!=i)&&(h!=j)&&(h!=k)&&(i!=j)&&(i!=k)&&(j!=k))
{
if((g*f)==a)
{
printf("%d*%d=%d\n",g,f,a);
};
};
};
};
};
};
};
return 0;
}