题解 | #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;
}
}
查看5道真题和解析