c++从标准输入读入数据。 第一行输入一个整数n,从第二行开始到第n+1行中,每一行包含一个长度为7的字符串,为上述的24点游戏,保证数据格式合法。 【输出格式】 输出到标准输出。 包含n行,对于每一个游戏,如果其结果为24则输出字符串Yes, 否则输出字符串No。纠正以下代码#include<iostream> #include<stack> #include<string> using namespace std; stack<char>s1; stack<int>s2; int sum; int opera(int a,char b,int c) { if (b == 'x')return a*b; else if (b == '/')return a / b; else if (b == '+')return a + b; else if (b == '-')return a - b; } int calculate(string s) { for (int i = 0; i < 7; i++) { s[i] = s[i] - '0'; if (s[i] >= 1 && s[i] <= 9) { s1.push(s[i]); } else if (s[i] == '+' || s[i] == '-') { s2.push(s[i]); } else if (s[i] == 'x' || s[i] == '/') { int top = s1.top(); int temp = opera(top, s[i], s[i + 1]); s1.push(temp); } } int tmp1[4], tmp2[3]; int index1 = 3; int index2 = 2; while (!s1.empty()) { tmp1[index1--] = s1.top(); s1.pop(); } while (!s2.empty()) { tmp2[index2--] = s2.top(); s2.pop(); } for (int i = 0; i < 4; i++) { sum += opera(tmp1[i], tmp2[i], tmp1[i + 1]); } return sum; } int main() { int n; cin >> n;//n行整数 string s ; for (int i = 0; i < n; i++) { cin >> s; calculate(s); if (sum == 24) { cout << "Yes" << endl; } else cout << "No" << endl; } system("pause"); }
时间: 2023-11-27 17:53:46 浏览: 117
在计算操作符时,应该使用两个操作数进行计算,而不是一个操作数和一个运算符。所以`opera`函数应该修改为:
```cpp
int opera(int a, char b, int c) {
if (b == 'x')return a * c;
else if (b == '/')return a / c;
else if (b == '+')return a + c;
else if (b == '-')return a - c;
}
```
此外,在每次计算结果后,应该将`sum`清零,否则`sum`的值会一直累加,导致计算结果错误。修改后的代码如下:
```cpp
#include<iostream>
#include<stack>
#include<string>
using namespace std;
stack<char>s1;
stack<int>s2;
int sum;
int opera(int a, char b, int c) {
if (b == 'x')return a * c;
else if (b == '/')return a / c;
else if (b == '+')return a + c;
else if (b == '-')return a - c;
}
int calculate(string s) {
while (!s1.empty()) s1.pop();
while (!s2.empty()) s2.pop();
sum = 0;
for (int i = 0; i < 7; i++)
{
s[i] = s[i] - '0';
if (s[i] >= 1 && s[i] <= 9)
{
s1.push(s[i]);
}
else if (s[i] == '+' || s[i] == '-')
{
s2.push(s[i]);
}
else if (s[i] == 'x' || s[i] == '/')
{
int top = s1.top();
s1.pop();
int temp = opera(top, s[i], s[i + 1]);
s1.push(temp);
i++;
}
}
int tmp1[4], tmp2[3];
int index1 = 3;
int index2 = 2;
while (!s1.empty())
{
tmp1[index1--] = s1.top();
s1.pop();
}
while (!s2.empty())
{
tmp2[index2--] = s2.top();
s2.pop();
}
for (int i = 0; i < 4; i++)
{
sum += opera(tmp1[i], tmp2[i], tmp1[i + 1]);
}
return sum;
}
int main() {
int n;
cin >> n;//n行整数
string s;
for (int i = 0; i < n; i++)
{
cin >> s;
calculate(s);
if (sum == 24)
{
cout << "Yes" << endl;
}
else
cout << "No" << endl;
}
return 0;
}
```