题解 | #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;
    }
}
全部评论

相关推荐

真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务