题目
用时
19年暑假写的,当时刚开始学Python,自己写运算符的压栈弹栈,写到快昏厥之际发现了Python的eval函数,几分钟简单小十行代码拿了满分,从此坚定了转Python的决心
思路
Python的eval
函数提供了由str型表达式计算数学运算结果的方法
只需把 x 换成 * 运算符,把 / 换成表示整除的 // 就可以了
满分代码
n = int(input())
for i in range(n):
line = input()
line = line.replace('x', '*')
line = line.replace('/', '//')
if eval(line) == 24:
print("Yes")
else:
print("No")
其他版本
Java
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
in.nextLine();
while(n-->0){
String s=in.nextLine();
ArrayList<String>list=new ArrayList<>();
for(int i=0;i<7;i++){
list.add(s.substring(i,i+1));
}
if(f(list)==24)
System.out.println("Yes");
else
System.out.println("No");
}
}
public static int f(ArrayList<String>list){//递归计算
if(list.size()==1)//递归出口
return Integer.parseInt(list.get(0));
for(int i=0;i<list.size();i++){
if(list.get(i).equals("x")||list.get(i).equals("/")){
list.set(i,""+f2(list.get(i-1),list.get(i),list.get(i+1)));
list.remove(i+1);
list.remove(i-1);
return f(list);
}
}
list.set(1,""+f2(list.get(0),list.get(1),list.get(2)));
list.remove(2);
list.remove(0);
return f(list);
}
public static int f2(String x1,String x2,String x3){//计算一个短式子
int a=Integer.parseInt(x1);
int b=Integer.parseInt(x3);
if(x2.equals("+"))
return a+b;
else if(x2.equals("-"))
return a-b;
else if(x2.equals("x"))
return a*b;
else return a/b;
}
}
C++
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
int n;
char str[10];
stack<int> num;
stack<char> sign;
int main()
{
scanf("%d",&n);
getchar();
while(!num.empty()) num.pop();
while(!sign.empty()) sign.pop();
for(int i=0;i<n;i++)
{
gets(str);
int j=0;
while(j<strlen(str))
{
if(str[j]>'0'&&str[j]<='9')
{
num.push(str[j]-'0');
}
else if(str[j]=='+')
{
sign.push('+');
}
else if(str[j]=='-')
{
j++;
num.push((-1)*(str[j]-'0'));
sign.push('+');
}
else if(str[j]=='x')
{
int q=num.top();
num.pop();
j++;
int p=str[j]-'0';
num.push(q*p);
}
else if(str[j]=='/')
{
int q=num.top();
num.pop();
j++;
int p=str[j]-'0';
num.push(q/p);
}
j++;
}
while(!sign.empty())
{
int q=num.top();
num.pop();
int p=num.top();
num.pop();
sign.pop();
num.push(q+p);
}
//printf("%d\n",num.top());
if(num.top()==24) printf("Yes\n");
else printf("No\n");
}
return 0;
}
我永远喜欢Python