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"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理