问题
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
———
1365
273
———
4095
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
思路
用两个for循环暴力枚举就出来了
代码
#include <stdio.h>
#include "string.h"
int aa[20];
int main() {
int a,b,c,d,e,f,g,h,sum;
int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19;
for (a=100;a<1000;a++) {
for (b=100;b<1000;b++) {
c=b/100;//第一排第二个百位
d=(b-c*100)/10;//十位
e=(b-c*100-d*10);//个位
f=a*e;//第二排第一个
g=a*d;//第二排第二个
h=a*c;//第三排第三个
if (h>1000||f>1000||g>1000) {
continue;
}
sum=a*b;
if (sum>=100000) {
continue;
}
x1=a/100;//第一排第一个百位
x2=(a-x1*100)/10;//十位
x3=(a-x1*100-x2*10);//十位
x4=f/100;//第二排第一个百位
x5=(f-x4*100)/10;
x6=(f-x4*100-x5*10);
x7=g/100;//第二排第二个百位
x8=(g-x7*100)/10;
x9=(g-x7*100-x8*10);
x10=h/100;//第二排第三个百位
x11=(h-x10*100)/10;
x12=(h-x10*100-x11*10);
x13=sum/10000;
x14=(sum-x13*10000)/1000;
x15=(sum-x13*10000-x14*1000)/100;
x16=(sum-x13*10000-x14*1000-x15*100)/10;
x17=(sum-x13*10000-x14*1000-x15*100-x16*10);
aa[c]++;
aa[d]++;
aa[e]++;
aa[x1]++;
aa[x2]++;
aa[x3]++;
aa[x4]++;
aa[x5]++;
aa[x6]++;
aa[x7]++;
aa[x8]++;
aa[x9]++;
aa[x10]++;
aa[x11]++;
aa[x12]++;
aa[x13]++;
aa[x14]++;
aa[x15]++;
aa[x16]++;
aa[x17]++;
if(sum==f+g*10+h*100 && aa[0]==2 &&aa[1]==2 &&aa[2]==2 &&aa[3]==2 &&aa[4]==2 &&aa[5]==2 &&aa[6]==2 &&aa[7]==2 &&aa[8]==2 &&aa[9]==2 ){
printf("%d*%d \n%d %d %d\n=%d",a,b,f,g,h,sum);
}
memset(aa, 0, sizeof(aa));
}
}
}