走进舒适圈の小窝

Loading...

42 点问题

42 点问题

题目描述:

众所周知在扑克牌中,有一个老掉牙的游戏叫做 24 点,选取4张牌进行加减乘除,看是否能得出 24 这个答案。
现在小蓝同学发明了一个新游戏,他从扑克牌中依次抽出6张牌,注意不是一次抽出,进行计算,看是否能够组成 42 点,满足输出 YES,反之输出 NO。
最先抽出来的牌作为第一个操作数,抽出牌做第二个操作数,运算结果在当作第一个操作数,继续进行操作。
除不尽的情况保留整数。
请设计一个程序对该问题进行解答。

样例:

输入:

K A Q 6 2 3

输出:

YES
  • 思路分析:

扑克牌中的数1~K,所以先判断字符,再枚举,最后再枚举运算符,利用集合存储结果。

  • 解答:
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] a = new int[6]; //存储输入的数字
        ArrayList<ArrayList<Integer>> list = new ArrayList<>();
        for (int i=0;i<6;i++){
            String n;
            n = scanner.next();
            if (n.charAt(0) == 'A')
                a[i] = 1;
            else if (n.charAt(0) == 'J')
                a[i] = 11;
            else if (n.charAt(0) == 'Q')
                a[i] = 12;
            else if (n.charAt(0) == 'K')
                a[i] = 13;
            else
                a[i] = (n.charAt(0) - '0'); //0的ASCII码为48,之后依次递增,减去之后即为本身
        }
        list.add(new ArrayList<>());
        list.get(0).add(a[0]);
        for (int i=1;i<=5;i++){
            list.add(new ArrayList<>()); //存放1~5次的运算结果
            for (int j=0;j<list.get(i-1).size();j++){ //i=0,j=1时,表示第一次运算(加减乘除)的结果
                list.get(i).add(list.get(i-1).get(j) + a[i]);
                list.get(i).add(list.get(i-1).get(j) - a[i]);
                list.get(i).add(list.get(i-1).get(j) * a[i]);
                list.get(i).add(list.get(i-1).get(j) / a[i]); //扑克中没有0,所以不用考虑除数为0的情况
            }
        }
        int flag = 0;
        for (int i=0;i<list.get(5).size();i++){
            if (list.get(5).get(i) == 42){
                flag = 1;
                break;
            }
        }
        if (flag == 1)
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}
posted @ 2024-12-08 17:44  走进舒适圈  阅读(5)  评论(0编辑  收藏  举报