题解 | #24点运算#

24点运算

https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    // 注意 hasNext 和 hasNextLine 的区别
    String s = in.nextLine().replaceAll(" ", "");
    String[] signs = {"+", "-", "*", "/"};
    String s1 = new String();

    if (s.contains("joker") || s.contains("JOKER")) {
      System.out.print("ERROR");
    } else {
      for (String ss : allSort(s)) {
          for (int j = 0; j < 4; j++) {
            for (int k = 0; k < 4; k++) {
              for (int l = 0; l < 4; l++) {
                String s2 =  ss.substring(0, 1) + signs[j] + ss.substring(1,2) + signs[k] + ss.substring(2, 3) + signs[l] + ss.substring(3);
                if (isTwentyF(s2)) {
                  s1 = s2;
                  break;
                }
            }
            if (!s1.isEmpty()) break;
          }
          if (!s1.isEmpty()) break;
        }
        if (!s1.isEmpty()) break;
      }
      if (s1.isEmpty()) {
        System.out.print("NONE");
      } else {
        System.out.print(s1);
      }
    }

  }

  static boolean isTwentyF(String s) {
    char[] chs = s.toCharArray();
    int sum = 0;
    int num = 0;
    char sign = '+';

    for (int i = 0; i < chs.length; i++) {
      if (Character.isDigit(chs[i])) {
        num = chs[i] - '0';
      } else if (Character.isLetter(chs[i])) {
        if (chs[i] == 'A') num = 1;
        else if (chs[i] == 'J') num = 11;
        else if (chs[i] == 'Q') num = 12;
        else if (chs[i] == 'K') num = 13;
      } 
      if(!Character.isDigit(chs[i])||i == chs.length - 1){
        if (sign == '+') sum = sum + num;
        else if (sign == '-') sum = sum - num;
        else if (sign == '*') sum = sum * num;
        else if (sign == '/') sum = sum / num;
        num = 0;
        sign = chs[i];
      }
    }
    if (sum == 24) {
      return true;
    } else {
      return false;
    }
  }

  static HashSet<String> allSort(String s) {
    HashSet<String> set = new HashSet<String>();
    if (s.length() == 0) {
      set.add("");
      return set;
    }
    String fnum = s.substring(0, 1);
    String remnum = s.substring(1);
    for (String ss : allSort(remnum)) {
      for (int i = 0; i <= ss.length(); i++) {
        StringBuffer sb = new StringBuffer(ss);
        set.add(sb.insert(i, fnum).toString());
      }
    }
    return set;
  }
}

全部评论

相关推荐

给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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