CCF201903-2 二十四点(100分)(Java)
程序员文章站
2022-06-07 15:16:05
...
import java.util.Scanner;
import java.util.Stack;
public class Point24 {
/**
* 二十四点
*/
public static void main(String[] arugs) {
// 获取行数
Scanner scan = new Scanner(System.in);
int count = scan.nextInt();
// 防止后面输入失败
scan.nextLine();
// 数字栈
Stack number = new Stack();
// 符号栈
Stack symbol = new Stack();
// 每一行的算式
String[] strArr = new String[count];
for (int i = 0; i < count; i++) {
strArr[i] = scan.nextLine();
}
// 压栈出栈操作(对乘除操作,加减压栈)
for (int i = 0; i < strArr.length; i++) {
String str = strArr[i];
number.push(str.charAt(0));
for (int j = 1; j < 6; j += 2) {
char sym = str.charAt(j);
int m, n;
if (sym == '+' || sym == '-') {
symbol.push(sym);
number.push(str.charAt(j + 1));
} else if (sym == 'x') {
m = Integer.valueOf(String.valueOf(number.pop()));
n = Integer.valueOf(String.valueOf(str.charAt(j + 1)));
number.push(m * n);
} else if (sym == '/') {
m = Integer.valueOf(String.valueOf(number.pop()));
n = Integer.valueOf(String.valueOf(str.charAt(j + 1)));
number.push(m / n);
}
}
// 加减操作
int res = Integer.valueOf(String.valueOf(number.pop()));
while (!number.isEmpty() && !symbol.isEmpty()) {
int temp = Integer.valueOf(String.valueOf(number.pop()));
char s = (char) symbol.pop();
if (s == '+') {
res = temp + res;
} else if (s == '-') {
res = temp - res;
}else if (s == 'x') {
res = temp * res;
} else if (s == '/') {
res = temp / res;
}
}
// 结果输出
if (res == 24) {
System.out.println("yes");
} else {
System.out.println("no");
}
number.clear();
symbol.clear();
}
}
}
做的思路比较清晰,只是代码写的有些繁琐。(速度比较慢)
上一篇: 日期类