试题编号: | 201903-2 |
---|---|
试题名称: | 二十四点 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
![]() ![]() |
方法一:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int n = input.nextInt();
ArrayList<Integer> nums = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
nums.clear();//清空列表
String expr = input.next();//expr:表达式
for (int j = 0;;) {
nums.add(expr.charAt(j) - '0');// char转int
if (++j == 7) {// 先运算后赋值
break;
}
nums.add((int) expr.charAt(j++));// 先赋值后运算
}
for (int j = 1; j < nums.size(); j += 2) {
if (nums.get(j) == 'x' || nums.get(j) == '/') {
nums.set(j - 1,
way(nums.get(j - 1), nums.get(j + 1), nums.get(j)));
//set(下标,值)
nums.remove(j + 1);
nums.remove(j);
j -= 2;
}
}
for (int j = 1; j < nums.size(); j += 2) {
nums.set(j - 1,
way(nums.get(j - 1), nums.get(j + 1), nums.get(j)));
nums.remove(j + 1);
nums.remove(j);
j -= 2;
}
if (nums.get(0) == 24) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
static int way(int a, int b, int operator) {
switch (operator) {
case '+':
return a + b;
case '-':
return a - b;
case 'x':
return a * b;
case '/':
return a / b;
}
return 0;
}
}
方法二:
import java.util.Scanner;
public class Main {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int n = input.nextInt();
int num[] = new int[7];
for (int i = 0; i < n; i++) {//循环n次
String s = input.next();
for (int m = 0; m < 7; m++) {//每行自己循环
num[m] = s.charAt(m);
}
for (int j = 0; j <= 4; j += 2) {// 循环三次
if (num[j + 1] == 'x' || num[j + 1] == '/') {
num[j + 2] = '0' + way(num[j], num[j + 2], num[j + 1]);
num[j] = '0';
num[j + 1] = j==0?'+':num[j-1];
}
}
for (int k = 0; k <= 4; k += 2) {
if (num[k + 1] == '+' || num[k + 1] == '-') {
num[k + 2] = '0' + way(num[k], num[k + 2], num[k + 1]);
}
}
if (num[6] == '0' + 24) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
static int way(int a, int b, int operator) {
int a1 = a - '0';
int b1 = b - '0';
switch (operator) {
case '+':
return a1 + b1;
case '-':
return a1 - b1;
case 'x':
return a1 * b1;
case '/':
return a1 / b1;
}
return 0;
}
}
方法三:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
while (n-- > 0)
System.out.println(calc(in.next()) == 24 ? "Yes" : "No");
}
static int calc(String expr) {
int sum = 0; // 加减的计算结果
int product = expr.charAt(0) - '0'; // 记录每个乘除项的计算结果
for (int pos = 1; pos < 7;) {
char op = expr.charAt(pos++);
int number = expr.charAt(pos++) - '0';
switch (op) {
case '+':
case '-':
sum += product; // 遇到加减号就把之前的 product 加进 sum 中
product = op == '+' ? number : -number; // 加减运算转为正负处理
break;
case 'x':
product *= number;
break;
case '/':
product /= number;
}
}
return sum + product; // 把最后一项加上
}
}
/*
10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5
*/
题目链接:http://118.190.20.162/view.page?gpid=T88