题目:
下图中,每个方块代表 1…13 中的某一个数字,但不重复。
例如:
1×2+9×7=13×5
10×8+12×3=11×4
只要有任意一个方块代表的数字不同,就算两种不同的方案。请你计算,一共有多少种不同的方案。
思路:
利用全排列求解,每求出一个排列就代入一次等式计算
代码:
public class Main {
private static int n=13,c=0;
private static int[] a={1,2,3,4,5,6,7,8,9,10,11,12,13};
public static void main(String[] args) {
// TODO Auto-generated method stub
perm(0);
System.out.println(c);//122368
}
private static void perm(int k) {
// TODO Auto-generated method stub
//如果等式1不成立的话,后面的就不用再算了
if(k==6){
if(!judge1()){
return;
}
}
if(k==n-1){
if(judge2()){
c++;
}
return;
}
for(int i=k;i<n;i++){
swap(k, i);
perm(k+1);
swap(k, i);
}
}
private static void swap(int x,int y){
int t=a[x];
a[x]=a[y];
a[y]=t;
}
//判断等式1是否成立
private static boolean judge1(){
if(a[0]*a[1]+a[2]*a[3]==a[4]*a[5]){
return true;
}
return false;
}
//判断等式2是否成立
private static boolean judge2(){
if(a[6]*a[7]-a[8]*a[9]==a[10]*a[11]){
return true;
}
return false;
}
}