OJ---24点游戏算法

问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出:
true or false


样例输入:7 2 1 10

样例输出:true

分析:+,-,*,/,()----控制运算顺序

穷举法 +动态规划+部分穷举(取出等价和无解部分)

import java.util.*;

public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int m1=sc.nextInt();
int m2=sc.nextInt();
int m3=sc.nextInt();
int m4=sc.nextInt();
System.out.print(result(m1, m2, m3,m4));
}
sc.close();
}
public static boolean result(int a,int b,int c,int d){
	int i,j,k;
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
			for(k=0;k<4;k++)
			{
				if(cal(a,b,c,d,i,j,k)==24) return true;
				if(cal(a,b,d,c,i,j,k)==24)return true;
				if(cal(a,c,b,d,i,j,k)==24)return true;
				if(cal(a,c,d,b,i,j,k)==24)return true;
				if(cal(a,d,b,c,i,j,k)==24)return true;
				if(cal(a,d,c,b,i,j,k)==24)return true;
				if(cal(b,a,c,d,i,j,k)==24)return true;
				if(cal(b,a,d,c,i,j,k)==24)return true;
				if(cal(b,c,a,d,i,j,k)==24)return true;
				if(cal(b,c,d,a,i,j,k)==24)return true;
				if(cal(b,d,a,c,i,j,k)==24)return true;
				if(cal(b,d,c,a,i,j,k)==24)return true;
				if(cal(c,a,b,d,i,j,k)==24)return true;
				if(cal(c,a,d,b,i,j,k)==24)return true;
				if(cal(c,b,a,d,i,j,k)==24)return true;
				if(cal(c,b,d,a,i,j,k)==24)return true;
				if(cal(c,d,a,b,i,j,k)==24)return true;
				if(cal(c,d,b,a,i,j,k)==24)return true;
				if(cal(d,a,b,c,i,j,k)==24)return true;
				if(cal(d,a,c,b,i,j,k)==24)return true;
				if(cal(d,b,a,c,i,j,k)==24)return true;
				if(cal(d,b,c,a,i,j,k)==24)return true;
				if(cal(d,c,a,b,i,j,k)==24)return true;
				if(cal(d,c,b,a,i,j,k)==24)return true;

			}
	return false;

}
public static int cal(int m1,int m2,int m3,int m4,int i,int j,int k){
	int sum=0;
	if(i==0)sum=m1+m2;
	else if(i==1)sum=m1-m2;
	else if(i==2)sum=m1*m2;
	else if(i==3)sum=m1/m2;

	if(j==0)sum=sum+m3;
	else if(j==1)sum-=m3;
	else if(j==2)sum*=m3;
	else if(j==3)sum/=m3;

	if(k==0)sum+=m4;
	else if(k==1)sum-=m4;
	else if(k==2)sum*=m4;
	else if(k==3)sum/=m4;
	
	return sum;

}
} 
另分析:http://www.cnblogs.com/grenet/archive/2013/03/17/2964455.html

你可能感兴趣的:(算法系列)