版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sword_anyone/article/details/89183252
看这个算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意:
111 + 222 = 333 是错误的填写法!
因为每个数字必须是不同的!
也就是说:1~9中的所有数字,每个必须出现且仅出现一次!
注意:
不包括数字“0”!
注意:
满足加法交换率的式子算两种不同的答案。
所以答案肯定是个偶数!
注意:
只要求计算不同的填法的数目
不要求列出所有填写法
package exe11_15;
public class Exe12 {
static int count = 0;
public static void main(String[] args) {
int number[] = new int[9];
for (int i = 0; i < number.length; i++) {
number[i] = i+1;
}
dfs(number,0);
System.out.println(count);
}
private static void dfs(int[] number, int begin) {
if (begin>=number.length) {
check(number);
return ;
}
for (int i = begin; i < number.length; i++) {
swap(number,begin,i);
dfs(number, begin+1);
swap(number, begin, i);
}
}
private static void swap(int[] number, int begin, int i) {
int temp = number[begin];
number[begin] = number[i];
number[i] = temp;
}
private static void check(int[] number) {
int left = multiply(number,0,2);
int center = multiply(number,3,5);
int right = multiply(number,6,8);
if (left+center==right) {
System.out.println(left+"+"+center+"="+right);
count++;
}
}
private static int multiply(int[] number, int begin, int end) {
int sum = 0;
for (int i = begin; i <= end; i++) {
sum = sum*10+number[i];
}
return sum;
}
}
支付宝扫红包,让我能够买杯咖啡,继续创作,谢谢大家!