问题描述
看这个算式:
☆☆☆
+ ☆☆☆
= ☆☆☆
如果每个五角星代表
1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意:
111 + 222 = 333
是错误的填写法!
因为每个数字必须是不同的!
也就是说:
1~9中的所有数字,每个必须出现且仅出现一次!
注意:
不包括数字“
0”!
注意:
满足加法交换率的式子算两种不同的答案。
所以答案肯定是个偶数!
注意:
只要求计算不同的填法的数目
不要求列出所有填写法
更不要求填写源代码!
java代码实现
package mec.lanqiao;
public class Main {
public static int cnt = 0;
static void swap(int [] arr , int a, int b) {
int temp = arr [a ];
arr[ a] = arr[ b];
arr[ b] = temp;
}
static boolean check(int [] arr ) {
int a = arr [0] * 100 + arr[1] * 10 + arr[2];
int b = arr [3] * 100 + arr[4] * 10 + arr[5];
int c = arr [6] * 100 + arr[7] * 10 + arr[8];
if (a + b == c )
return true ;
return false ;
}
static void permutation(int[] arr, int begin, int end) {
if (end - begin <= 0) {
if (check( arr)) {
cnt++;
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i]);
// if (i == 2)
// System.out.print("+");
// if (i == 5)
// System.out.print("=");
// }
// System.out.println();
}
} else {
for (int i = begin ; i <= end ; i ++) {
swap(arr, begin, i);
permutation(arr, begin + 1, end);
swap(arr, begin, i);
}
}
}
public static void main(String[] args) {
int[] arr = new int[9];
for (int i = 0; i < arr .length ; i ++) {
arr[ i] = i + 1;
}
permutation(arr, 0, arr.length - 1);
System. out.println(cnt );
}
}
运行结果:控制台输出总数336