题目:猜算式
你一定还记得小学学习过的乘法计算过程,比如:
x 15
------
273
------
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public boolean judge(int temp1, int temp2, int temp3, int temp4, int temp5, int temp6) {
ArrayList<Integer> list = new ArrayList<Integer>();
while(temp1 > 0) {
list.add(temp1 % 10);
temp1 = temp1 / 10;
}
while(temp2 > 0) {
list.add(temp2 % 10);
temp2 = temp2 / 10;
}
while(temp3 > 0) {
list.add(temp3 % 10);
temp3 = temp3 / 10;
}
while(temp4 > 0) {
list.add(temp4 % 10);
temp4 = temp4 / 10;
}
while(temp5 > 0) {
list.add(temp5 % 10);
temp5 = temp5 / 10;
}
while(temp6 > 0) {
list.add(temp6 % 10);
temp6 = temp6 / 10;
}
Collections.sort(list);
if(list.size() == 20) {
int j = 0;
for(int i = 0;i < 20;i = i + 2, j++) {
if(list.get(i) == j && list.get(i + 1) == j)
continue;
else
return false;
}
if(j == 10)
return true;
}
return false;
}
public boolean judge1(int n) {
if(n >= 1000 || n < 100)
return false;
return true;
}
public void printResult() {
for(int i = 100;i <= 999;i++) {
int temp1 = i;
for(int j = 100;j <= 999;j++) {
int temp2 = j;
int temp3 = temp2 % 10 * temp1;
int temp4 = temp2 / 10 % 10 * temp1;
int temp5 = temp2 / 100 * temp1;
int temp6 = temp2 * temp1;
if(judge1(temp3) && judge1(temp4) && judge1(temp5) && temp6 > 9999 && temp6 < 100000) {
if(judge(temp1, temp2, temp3, temp4, temp5, temp6)) {
System.out.println("temp1 = "+temp1+", temp2 = "+temp2+", temp6 = "+temp6);
}
} else {
continue;
}
}
}
}
public static void main(String[] args) {
Main test = new Main();
test.printResult();
}
}