题目:猜算式
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
public class 猜算式 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = new int[20];
int visit[] = new int[10];
dfs(a,visit,0);
}
private static void dfs(int[] a, int[] visit, int num) {
// TODO Auto-generated method stub
if (num==20) {
judge(a);
return;
}
/* 0 1 2
* 3 4 5
* ----------
* 6 7 8
* 9 10 11
* 12 13 14
* --------------
* 15 16 17 18 19
* */
for (a[num] = 0; a[num] < 10; a[num]++) {
int up = a[0]*100+a[1]*10+a[2];
if (num==8&&(a[5]*up!=a[6]*100+a[7]*10+a[8])) {
continue;
}
if (num==11&&(a[4]*up!=a[9]*100+a[10]*10+a[11])) {
continue;
}
if (num==14&&(a[3]*up!=a[12]*100+a[13]*10+a[14])) {
continue;
}
if (num==19&&a[19]!=a[8]) {
continue;
}
if (visit[a[num]]<2) {
visit[a[num]]++;
num++;
dfs(a, visit, num);
num--;
visit[a[num]]--;
}
}
}
private static void judge(int[] a) {
// TODO Auto-generated method stub
int up = a[0]*100+a[1]*10+a[2];
int down = a[3]*100+a[4]*10+a[5];
int end = a[15]*10000+a[16]*1000+a[17]*100+a[18]*10+a[19];
if (up*down==end) {
System.out.println(end);
}
}
}