ccf 模拟题 24点问题 📅 2026/7/28 16:44:43 24点问题题目定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成保证四则运算符将数字两两隔开不存在括号和其他字符运算顺序按照四则运算顺序进行。其中加法用符号 表示减法用符号 - 表示乘法用小写字母 x 表示除法用符号 / 表示。在游戏里除法为整除例如 2 / 3 03 / 2 1, 4 / 2 2。老师给了你 n 个游戏的解请你编写程序验证每个游戏的结果是否为 24 。输入从标准输入读入数据。第一行输入一个整数 n从第 2 行开始到第 n 1 行中每一行包含一个长度为 7的字符串为上述的 24 点游戏保证数据格式合法。输出输出到标准输出。包含 n 行对于每一个游戏如果其结果为 24 则输出字符串 Yes否则输出字符串 No。输入样例10934x354x5x57-9-985x6/5x435791x19-91x9-5/98/56x96x7-3x66x44/5输出样例YesNoNoYesYesNoNoNoYesYes样例解释934 × 3 2454 × 5 × 5 1057 − 9 − 98 −35 × 6/5 × 4 243 5 7 9 241 × 19 − 911 × 9 − 5/9 98/5 6 × 9 556 × 7 − 3 × 6 246 × 4 4/5 24这个是自己写的所以写的比较乱但是也是能过的哈哈哈用的数组和堆栈的思想比较类似先把符号和数字分开然后扫描其中的乘除如果有乘除就先算乘除最后将剩余的相加减。package helana; import java.util.Arrays; import java.util.Scanner; public class a { public static void main(String[] args) { Scanner inputnew Scanner(System.in); int ainput.nextInt(); boolean result[]new boolean[a]; for(int i0;ia;i){ String strinput.next(); result[i]ifNum(str); } for(int i0;ia;i){ if(result[i]true){ System.out.println(Yes); }else { System.out.println(No); } } } private static boolean ifNum(String str) { char b[]str.toCharArray();// * / int num[]new int[4]; char sign[]new char[3]; int lenstr.length(); int j0; int k0; for(int i0;ilen;i){ if(b[i]0b[i]9){ num[j]b[i]-0; j; }else { sign[k]b[i]; k; } } for(int i0;isign.length;i){ if(sign[i]x){ num[i]num[i]*num[i1]; reNum(num,sign,i); i--; }else if(sign[i]/){ num[i]num[i]/num[i1]; reNum(num,sign,i); i--; } } for(int i0;isign.length;i){ if(sign[i]){ num[i]num[i]num[i1]; reNum(num,sign,i); i--; }else if(sign[i]-){ num[i]num[i]-num[i1]; reNum(num,sign,i); i--; } } if(num[0]24){ return true; }else { return false; } } private static void reNum(int[] num, char[] sign, int i) { for(int ji1;jnum.length-1;j){ num[j]num[j1]; } int ji; for(;jsign.length-1;j){ sign[j]sign[j1]; } sign[j] ; return; } }