当前位置: 代码迷 >> 综合 >> java 寒假作业
  详细解决方案

java 寒假作业

热度:97   发布时间:2024-01-26 04:46:37.0

寒假作业

现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:

□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □

(如果显示不出来,可以参见【图1.jpg】)

每个方块代表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

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

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

public class Main {static int num = 0;static int[] a = new int[13];  //存下标对应1-12数字static boolean[] b = new boolean[14];  //标记是否已经被用了public static void dfs(int k){if(k == 4) if(a[1] + a[2] != a[3]) return;	//每次进行每个要求的判定,能减少很多时间if(k == 7) if(a[4] - a[5] != a[6]) return;if(k == 10) if(a[7] * a[8] != a[9]) return;if(k == 13) if(a[10] != a[11] * a[12]) return;if(k == 13)  {num++;return;}for(int i = 1; i <14; i++) {		//每次赋值,dfsif(b[i] == false) {b[i] =true;a[k] = i;dfs(k+1);a[k] = 0;b[i] = false;}}}public static void main(String[] args){dfs(1);System.out.print(num);}
}

代码改了又改,简单的dfs暴力运行的话,会运行比较久,可能还运行不出来
加上每次的判定,返回,时间会减少很多。

64

  相关解决方案