201903-2 二十四点
【题目背景】
二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上数字的运算结果为24。
【题目描述】
定义每一个游戏由4个从1-9的数字和3个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用符号
+ 表示,减法用符号
– 表示,乘法用小写字母
x 表示,除法用符号
/表示。在游戏里除法为整除,例如
2/3=0,3/2=1,4/2=2。
老师给了你n个游戏的解,请你编写程序验证每个游戏的结果是否为24。
【输入格式】
从标准输入读入数据。
第一行输入一个整数n,从第2行开始到第n+1行中,每一行包含一个长度为7的字符串,为上述的24点游戏,保证数据格式合法。
【输出格式】
输出到标准输出。
包含n行,对于每-一个游戏,如果其结果为24则输出字符串Yes,否则输出字符串No。
【样例1输入】
10
9+3+4×3 5+4x5x5 7-9-9+8 5×6/5×4 3+5+7+9 1×1+9-9 1×9-5/9 8/5+6×9 6×7-3×6 6×4+4/5
【样例1输出】 Yes No No Yes Yes No No No Yes Yes
【样例1解释】
9+3+4×3=24 5+4x5x5=105 7-9-9+8=-3 5×6/5×4=24 3+5+7+9=24 1×1+9-9=1 1×9-5/9=9 8/5+6×9=55 6×7-3×6=24 6×4+4/5=24
import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); sc.nextLine(); while (n > 0) { String str = sc.nextLine(); Stack<Integer> number = new Stack<>(); char[] ch = str.toCharArray(); int sum = 0; int i = 0; /* * for (char c : ch) { System.out.println(c); } */ while (i < 7) { if (i == 0) { number.push(ch[i] - '0'); i++; }else { if (ch[i] == 'x') { i++; int left = number.pop(); number.push(left * (ch[i] - '0')); i++; //System.out.println("xxxxxxxx"); }else { if (ch[i] == '/') { i++; int left = number.pop(); number.push(left / (ch[i] - '0')); i++; //System.out.println("///////////"); }else { if (ch[i] == '-') { i++; number.push(-(ch[i] - '0')); i++; // System.out.println("--------------"); }else { i++; number.push(ch[i] - '0'); i++; // System.out.println("+++++++++++"); } } } } } sum = number.pop(); //System.out.println(sum); while (!number.empty()) { int right = number.pop(); sum += right; // System.out.println(right); // System.out.println(sum); } // System.out.println(sum); if (sum == 24) { System.out.println("Yes"); } else { System.out.println("No"); } n--; } } }