CCF二十四点
这是一个简单的题目,为什么拿出来说一下?
因为发现了新大陆
我们先看看c++的vector容器做法
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
vector<int> num;
vector<char> sym;
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
while(n--){
string str;
cin>>str;
num.clear();
sym.clear();
for(int i=0;i<4;i++){
num.push_back(str[i*2]-'0');
if(i<3) sym.push_back(str[2*i+1]);
}
for(int i=0;i<sym.size();i++){
if(sym[i]=='x'){
int temp=num[i]*num[i+1];
num.erase(num.begin()+i+1);
num.erase(num.begin()+i);
num.insert(num.begin()+i,temp);
sym.erase(sym.begin()+i);
i--;
}
else if(sym[i]=='/'){
int temp=num[i]/num[i+1];
num.erase(num.begin()+i+1);
num.erase(num.begin()+i);
num.insert(num.begin()+i,temp);
sym.erase(sym.begin()+i);
i--;
}
}
int ans=num[0];
for(int i=0;i<sym.size();i++){
if(sym[i]=='+') ans+=num[i+1];
else if(sym[i]=='-') ans-=num[i+1];
}
if(ans==24) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
这是我个人认为的c++来做的最方便的一种方法,比起stack,vector的增删使得四则运算的过程更为清晰,更容易去模拟!
python_eval()函数杀我!!!太强了呀!
n = int(input())
while n:
print('Yes' if eval(input().replace('x', '*').replace('/', '//')) == 24 else 'No')
n -= 1
你没有看错,python四行就给你秒了
python思路
这里的思路很新奇,就是把x和/换掉,变成计算机认识的符号*和//(转义字符的/),然后把字符串当成计算式给电脑自己计算