这是24点游戏的代码,输入4个数(空格隔开),输出4个数的不同组合,算出24。输出所有结果,答案会因为交换顺序而有重复。
很抱歉没有注释。。。
package _24net;
import java.util.Scanner;
public class _24net {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int[] a= {0,0,0,0};
for(int i = 0; i< 4;i++){
a[i] = scanner.nextInt();
}
f(a,3);
System.out.println("over");
}
private static void f(int[] a,int b) {
if(b==0){
f2(a,3,"");
return;
}
int t;
for(int i = b;i >= 0; i--){
t = a[i];
a[i] = a[b];
a[b] = t;
f(a, b-1);
t = a[i];
a[i] = a[b];
a[b] = t;
}
}
private static void f2(int[] a,int b,String s) {
if(b==0){
if(a[0]==24)
System.out.println(s);
return;
}
if(b==2){
int m = a[2];
a[2] = a[0];
a[0] = m;
int t;
t = a[b-1];
a[b-1] = a[b]+t;
f2(a, b-1,s+a[b]+" + "+t+" = "+a[b-1]+"; ");
a[b-1] = t;
t = a[b-1];
a[b-1] = a[b]-t;
f2(a, b-1,s+a[b]+" - "+t+" = "+a[b-1]+"; ");
a[b-1] = t;
t = a[b-1];
a[b-1] = a[b]*t;
f2(a, b-1,s+a[b]+" * "+t+" = "+a[b-1]+"; ");
a[b-1] = t;
t = a[b-1];
if(t != 0 ){
a[b-1] = a[b]/t;
f2(a, b-1,s+a[b]+" / "+t+" = "+a[b-1]+"; ");
a[b-1] = t;
}
t = a[b-1];
if( a[b] != 0 ){
a[b-1] = t/a[b];
f2(a, b-1,s+t+" / "+a[b]+" = "+a[b-1]+"; ");
a[b-1] = t;
}
m = a[2];
a[2] = a[0];
a[0] = m;
}
int t1;
t1 = a[b-1];
a[b-1] = a[b]+t1;
f2(a, b-1,s+a[b]+" + "+t1+" = "+a[b-1]+"; ");
a[b-1] = t1;
t1 = a[b-1];
a[b-1] = a[b]-t1;
f2(a, b-1,s+a[b]+" - "+t1+" = "+a[b-1]+"; ");
a[b-1] = t1;
t1 = a[b-1];
a[b-1] = a[b]*t1;
f2(a, b-1,s+a[b]+" * "+t1+" = "+a[b-1]+"; ");
a[b-1] = t1;
t1 = a[b-1];
if(t1 != 0){
if(a[b]%t1==0){
a[b-1] = a[b]/t1;
f2(a, b-1,s+a[b]+" / "+t1+" = "+a[b-1]+"; ");
a[b-1] = t1;
}
}
t1 = a[b-1];
if(a[b] != 0){
if(t1%a[b]==0){
a[b-1] = t1/a[b];
f2(a, b-1,s+t1+" / "+a[b]+" = "+a[b-1]+"; ");
a[b-1] = t1;
}
}
}
}