该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package TrueTest;
/**
* Created by WangJianhai on 2017/4/2 15:46.
*/
//寒假作业
//
// 现在小学的数学题目也不是那么好玩的。
// 看看这个寒假作业:
//
// □ + □ = □
// □ - □ = □
// □ × □ = □
// □ ÷ □ = □
//
// (如果显示不出来,可以参见【图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 Test6_BackTrack {
public static int[][] grid = new int[4][3];
public static int[] used = new int[14];
public static int knt = 0;
private static int operate(int i){
int x = grid[i][0];
int y = grid[i][1];
if(i == 0){
if(x + y < 14)
return x + y;
else
return 0;
}
if(i == 1){
if(x - y > 0)
return x - y;
else
return 0;
}
if(i == 2){
if(x * y < 14)
return x * y;
else
return 0;
}
if(i == 3){
if(x % y == 0)
return x % y;
else
return 0;
}
return 0;
}
private static void g(int i, int j){
if(i == 4 && j == 0)
knt++;
else
{
if(j == 2)
{
int x = operate(i);
if(used[x] == 0){
grid[i][j] = x;
used[x] = 1;
g(i+1, 0);
if(x != 0) used[x] = 0;
}
}
else for(int k = 1; k < 14; k++){
if(used[k] == 0){
used[k] = 1;
grid[i][j] = k;
g(i, j+1);
used[k] = 0;
}
}
}
}
public static void main(String[] args) {
used[0] = 1;
new Test6_BackTrack().g(0,0);
System.out.println(knt);
}
}