版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sword_anyone/article/details/89072222
看下面的算式:
□□ 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
…
请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要
package exe1_5;
import java.util.ArrayList;
import java.util.List;
public class Exe3 {
static List<String> copy = new ArrayList<String>();
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < 10; i++) {
list.add(-1);
}
dfs(list,0);
}
private static void dfs(List<Integer> list, int begin) {
if (begin>=list.size()) {
checkAndShow(list);
return ;
}
for (int i = 1; i <= list.size(); i++) {
if (!list.contains(i)) {
list.set(begin, i);
dfs(list, begin+1);
list.set(begin, -1);
}
}
}
private static void checkAndShow(List<Integer> list) {
int a = multiply(list, 0, 1);
int b = multiply(list, 2, 3);
int c = multiply(list, 4, 5);
int d = multiply(list, 6, 8);
if (a*b==c*d) {
String string = a+"*"+b+"="+c+"*"+d;
String string2 = b+"*"+a+"="+c+"*"+d;
if (copy.contains(string)) {
return ;
}
else{
copy.add(string2);
System.out.println(list);
}
}
}
private static int multiply(List<Integer> list, int begin, int end) {
int sum =0 ;
for (int i = begin; i <=end ; i++) {
sum = sum*10 + list.get(i);
}
return sum;
}
}
打赏一点钱,帮我买杯咖啡,继续创作,谢谢大家!