题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] nums=new int[4]; if (in.hasNext()) { String[] str = in.nextLine().split(" "); for(int i=0;i<4;i++)nums[i]=Integer.parseInt(str[i]); } //先确定四个数字的顺序 for(int a=0;a<4;a++){ int used=(1<<a); for(int b=0;b<4;b++){ if(((used>>b) & 1)==1)continue; used= (used|(1<<b)); for(int c=0;c<4;c++){ if(((used>>c) & 1)==1)continue; used= (used|(1<<c)); for(int d=0;d<4;d++){ if(((used>>d) & 1)==1)continue; if(func(nums[a],nums[b],nums[c],nums[d])){ System.out.println("true"); return; } } } } } System.out.println("false"); } public static boolean func(int aa,int bb,int cc,int dd){ char[] all={'+','-','*','/'}; double a=aa,b=bb,c=cc,d=dd; //计算,有以下4中计算方式 // ab cd ; ab c d ; a bc d ; a b cd ; for(char ch1:all){ double x1=calu(a,b,ch1); double z1=calu(b,c,ch1); double u1=calu(c,d,ch1); for(char ch2:all){ double x2=calu(c,d,ch2); double y2=calu(x1,c,ch2); double z2=calu(a,z1,ch2); double u2=calu(b,u1,ch2); for(char ch3:all){ double x3=calu(x1,x2,ch3); if(x3==24)return true; double y3=calu(y2,d,ch3); if(y3==24)return true; double z3=calu(z2,d,ch3); if(z3==24)return true; double u3=calu(a,u2,ch3); if(u3==24)return true; } } } return false; } public static double calu(double a,double b,char ch){ double res=0; switch(ch){ case '+': res=a+b; break; case '-': res=a-b; break; case '*': res=a*b; break; case '/': if(b==0)res=10001; else res=a/b; } return res; } }
理论上各种情况都考虑到了