CCF CSP 201903 02 二十四点游戏
| 试题编号: | 201903-2 |
| 试题名称: | 二十四点 |
| 时间限制: | 1.0s |
| 内存限制: | 512.0MB |
| 问题描述: |
我的思路是 遇到加减法(减法的减数处理成负数最后只做加法 不然回wr)压栈 遇到乘除法 计算 完成之后 把 栈排空
问题找到了 减法没有做特殊处理 导致的错误 现在的代码是过了的
#include<iostream>
#include<stack>
using namespace std;
stack<int> num;
int val;
char ch;
int val2;
void slove(string s){
for(int i = 0; i < s.length();i++){
if(s[i]>='0' &&s[i] <='9'){
val = s[i]-'0';
num.push(val);
}else if(s[i] == '+'||s[i] == '-'){
if(s[i] == '-'){
val = 0-s[++i]+'0';
num.push(val);
}
}else if(s[i] == 'x' ||s[i] == '/'){
ch = s[i++];
val = s[i]-'0';
if(ch == 'x'){
val = val*num.top();
num.pop();
num.push(val);
}else{
val = num.top()/val;
num.pop();
num.push(val);
}
}
}
val= 0;
while(!num.empty()){
val += num.top();
num.pop();
}
if(val == 24){
printf("Yes\n");
}else{
printf("No\n");
}
}
int main()
{
int n;
string s;
scanf("%d",&n);
while(n--){
cin >> s;
slove(s);
}
return 0;
}
版权声明:本文为qq_28640193原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。