package cn.dlpu.lby;
import java.util.ArrayList;
import java.util.List;
public class Guesssuanshi {
/*
* 猜算式 看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数。
* 如果没有限定条件,这样的例子很多。 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次!
* 比如: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 .....
* 请编程,输出所有可能的情况! 注意: 左边的两个乘数交换算同一方案,不要重复输出! 不同方案的输出顺序不重要
*/
static List<String> arr1 = new ArrayList<String>();
static List<String> arr2 = new ArrayList<String>();
private static void print() {
// TODO Auto-generated method stub
for (int i = 0; i < arr2.size(); i++) {
String a = arr2.get(i).substring(0, 2);
String b = arr2.get(i).substring(2, 4);
String c = arr2.get(i).substring(4, 6);
String d = arr2.get(i).substring(6);
System.out.println(a + " X " + b + "=" + c + " X " + d);
}
}
private static void fun() {
// TODO Auto-generated method stub
int[] n = new int[9];
init(n);
sort(n, 0, n.length - 1);
removeDuplicate();
}
// 去除重复的元素
private static void removeDuplicate() {
// TODO Auto-generated method stub
arr2.add(arr1.get(0));
boolean flag = true;
for (int i = 1; i < arr1.size(); i++) {
for (int j = 0; j < arr2.size(); j++) {
flag = dup(arr1.get(i), arr2.get(j));
if (flag)
break;
}
if (!flag)
arr2.add(arr1.get(i));
}
}
// 判断是否重复
private static boolean dup(String string1, String string2) {
// TODO Auto-generated method stub
String a = string1.substring(0, 2);
String b = string1.substring(2, 4);
String c = string2.substring(0, 2);
String d = string2.substring(2, 4);
if (a.equals(d) && b.equals(c))
return true;
else
return false;
}
// 将数组全排列
private static void sort(int[] n, int start, int end) {
// TODO Auto-generated method stub
if (start >= end) {
check(n);
return;
} else {
for (int i = start; i <= end; i++) {
int t = n[start]; // 交换元素
n[start] = n[i];
n[i] = t;
sort(n, start + 1, end);
t = n[start]; // 还原元素
n[start] = n[i];
n[i] = t;
}
}
}
// 检查是否符合要求
private static void check(int[] n) {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer();
for (int i : n)
sb.append(i);
int a = Integer.parseInt(sb.substring(0, 2));
int b = Integer.parseInt(sb.substring(2, 4));
int c = Integer.parseInt(sb.substring(4, 6));
int d = Integer.parseInt(sb.substring(6));
if (a * b == c * d)
arr1.add(sb.toString());
}
// 初始化数组
private static void init(int[] n) {
// TODO Auto-generated method stub
for (int i = 0; i < 9; i++) {
n[i] = i + 1;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
fun();
print();
}
}
猜算式
最新推荐文章于 2021-05-24 16:56:50 发布