题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { static StringBuilder output; static Stack stack ; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line; while( (line= br.readLine())!=null ){ String[] pokers = line.split(" "); HashMap map = new HashMap(); stack = new Stack(); output = new StringBuilder(); map.put("A",1); map.put("2",2); map.put("3",3); map.put("4",4); map.put("5",5); map.put("6",6); map.put("7",7); map.put("8",8); map.put("9",9); map.put("10",10); map.put("J",11); map.put("Q",12); map.put("K",13); int nums[] = new int[4]; for(int i=0;i<4;i++){ if(map.containsKey(pokers[i])){ nums[i]=map.get(pokers[i]); }else{ output.append("ERROR"); } } if(output.length()!=0){ System.out.println(output); break; } //根据nums 计算24 boolean[] isUsed = new boolean[4]; boolean find = false; for(int i =0;i<4;i++){ isUsed[i]=true; if(f24(nums,isUsed,1,nums[i],pokers)){ stack.push(pokers[i]+""); find = true; break; } isUsed[i]=false; } if(find){ while(!stack.isEmpty()){ output.append(stack.pop()); } System.out.println(output.toString()); }else{ System.out.println("NONE"); } } } //根据输入的数字计算24 static boolean f24(int[] nums,boolean[] isUsed,int hasUsed, int curnum ,String[] pokers){ if(curnum==24 && hasUsed==4){ return true; }else if(hasUsed==4) { return false; } for(int i =0;i<4;i++){ if(!isUsed[i]){ isUsed[i]=true; if(f24(nums,isUsed,hasUsed+1,curnum+nums[i],pokers)){ stack.push("+"+pokers[i]); return true; } if(f24(nums,isUsed,hasUsed+1,curnum-nums[i],pokers)){ stack.push("-"+pokers[i]); return true; } if(f24(nums,isUsed,hasUsed+1,curnum*nums[i],pokers)){ stack.push("*"+pokers[i]); return true; } if( curnum%nums[i]==0 && f24(nums,isUsed,hasUsed+1,curnum/nums[i],pokers)){ stack.push("/"+pokers[i]); return true; } //回溯 isUsed[i]=false; } } return false; } }