乘式还原。
代码:
#include
int main(void)
{
int A,B,C,D,E,F,fi,se,th,fi1,fi2,fi3,fi4,se1,se2,se3,se4,th1,th2,th3,sum=0,sum1,sum2,sum3,sum4,sum5;
for(A=1;A<=4;A++)
for(B=5;B<=9;B++)
for(C=0;C<=4;C++)
for(D=1;D<=4;D++)
for(E=0;E<=4;E++)
for(F=5;F<=9;F++)
{
fi=(A*100+B*10+C)*F;
se=(A*100+B*10+C)*E;
th=(A*100+B*10+C)*D;
fi1=fi/1000;
fi2=fi/100%10;
fi3=fi/10%10;
fi4=fi%10;
se1=se/1000;
se2=se/100%10;
se3=se/10%10;
se4=se%10;
th1=th/100;
th2=th/10%10;
th3=th%10;
if(fi1>=1 && fi1<=4 && fi2<=4 && fi3<=4 && fi4<=4)
if(se1>=1 && se1<=4 && se2<=4 && se3>=5 && se4>=5)
if(th1>=5 && th2<=4 && th3<=4)
{
sum=(A*100+B*10+C)*(D*100+E*10+F);
sum1=sum/10000;
sum2=sum/1000%10;
sum3=sum/100%10;
sum4=sum/10%10;
sum5=sum%10;
if(sum1>=5 && sum2<=4 && sum3>=5 && sum4<=4 && sum5<=4)
{
printf(" %d%d%d\n",A,B,C);
printf(" *%d%d%d\n",D,E,F);
printf("----------\n");
printf(" %d%d%d%d\n",fi1,fi2,fi3,fi4);
printf(" %d%d%d%d \n",se1,se2,se3,se4);
printf(" %d%d%d \n",th1,th2,th3);
printf("----------\n");
printf("%d%d%d%d%d\n",sum1,sum2,sum3,sum4,sum5);
printf("");
}
}
}
}
运行结果:
372
*246
----------
2232
1488
744
----------
91512
--------------------------------
Process exited after 0.4223 seconds with return value 6
请按任意键继续. . .
题目:
乘式还原
A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式:
A Z A
*A A Z
--------------
A A A A
A A Z Z
Z A A
--------------
Z A Z A A
我的思路:
0X01:先用上面的AZA乘以下面整数的个位A,得到 AAAA。
0X02:然后用上面的AZA乘以下面整数的十位Z,得到AAZZ。
0X03:然后用上面的AZA乘以下面整数的百位A,得到ZAA。
0X04:现在,我们要保证AAAA、AAZZ、ZAA的每一位符合它的范围。比如A>=0 && A<=4,Z>=5 && Z<=9,要这样去判断。
0X05:如果上面条件成立,那就把这几个数加起来,或者用那个被乘数乘以乘数,也就是AZA*AAZ,得到积。
0X06:继续判断积的每一位数是否符合它的范围,如果符合,那么这就是一个符合题目要求的结果。
总结:
这个题目有点繁琐,基本思路不难。只要符合所有的条件即可。