题目描述

现在小学的数学题目也不是那么好玩的。

看看这个寒假作业:

□ + □ = □

□ - □ = □

□ × □ = □

□ ÷ □ = □

每个方块代表1~13中的某一个数字,但不能重复。

比如:

6 + 7 = 13

9 - 8 = 1

3 * 4 = 12

10 / 2 = 5

以及:

7 + 6 = 13

9 - 8 = 1

3 * 4 = 12

10 / 2 = 5

就算两种解法。(加法,乘法交换律后算不同的方案)

你一共找到了多少种方案?

请填写表示方案数目的整数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

java代码

一个简单的全排列

import java.util.*;

public class Main {

static int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
static int ans = 0;

public static void main(String[] args) {
dfs(0);
System.out.println(ans);
}

private static void dfs(int k) {
if (k == arr.length) {
if (check()) {
ans++;
}
}
// 当前三个数已经确定,并且不满足条件时直接return,可加快程序运行速度
// 可以将下面的else if中的内容注释掉观察运行速度的区别
else if (k == 3) {
if (arr[0] + arr[1] != arr[2]) {
return;
}
}

for (int i = k; i < arr.length; i++) {
int t = arr[i];
arr[i] = arr[k];
arr[k] = t;

dfs(k + 1);

t = arr[i];
arr[i] = arr[k];
arr[k] = t;
}
}

private static boolean check() {
if (arr[0] + arr[1] == arr[2]
&& arr[3] - arr[4] == arr[5] && arr[6] * arr[7] == arr[8]
//注意此处判断两个整数相除是否等于另一个整数
&& arr[9] / arr[10] == arr[11] && arr[9] % arr[10] == 0)
return true;
return false;
}
}