【题目】
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
解题思路:暴力搜索
package 字符串处理;
import java.util.Arrays;
public class 神奇算式 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char ex[] = new char[4];
char ex1[];
// 记录一位乘三位符合的情况
int num1 = 0;
// 记录两位乘两位符合的情况
int num2 = 0;
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
for (int k = 0; k <= 9; k++) {
for (int l = 0; l <= 9; l++) {
// 一位乘三位
int temp1 = j * 100 + k * 10 + l;// 三位
int temp2 = i * temp1;
// 将结果存入数组
ex1 = Integer.toString(temp2).toCharArray();
// 将当前数字存入数组,首先将它变为一个任意的数字,目的是方便存入char数组
int te = i * 1000 + j * 100 + k * 10 + l;
ex = Integer.toString(te).toCharArray();
//
Arrays.sort(ex);
Arrays.sort(ex1);
// 检查各位是否相等
if (temp2 > 1000) {
if (ex[0] == ex1[0] && ex[1] == ex1[1] && ex[2] == ex1[2] && ex[3] == ex1[3]) {
System.out.println(i + "*" + temp1 + "=" + temp2);
num1++;
}
}
}
}
}
}
for (int i = 1; i <= 9; i++) {
for (int j = 0; j <= 9; j++) {
for (int k = 1; k <= 9; k++) {
for (int l = 0; l <= 9; l++) {
// 两位乘两位
int temp3 = i * 10 + j;
int temp4 = k * 10 + l;
int temp5 = temp3 * temp4;
// 将结果存入数组
char[] ex2 = Integer.toString(temp5).toCharArray();
Arrays.sort(ex2);
// 将当前数字存入数组,首先将它变为一个任意的数字,目的是方便存入char数组
int te = i * 1000 + j * 100 + k * 10 + l;
ex = Integer.toString(te).toCharArray();
Arrays.sort(ex);
// 检查各位是否相等
if (temp5 > 1000) {
if (ex[0] == ex2[0] && ex[1] == ex2[1] && ex[2] == ex2[2] && ex[3] == ex2[3]) {
System.out.println(temp3 + "*" + temp4 + "=" + temp5);
num2++;
}
}
}
}
}
}
// 将符合的情况相加,因为两位乘两位有乘法交换律,所以需要除二
System.out.println(num1 + num2 / 2);
}
}