[TOC]
题目描述
解题思路
这道题就是很简单的计算题目,可以用两种方式:栈、循环遍历
实际上,CCF的第二题基本上都不是考什么算法,使用栈来实现虽然泛用性更高却未必更简单。个人认为直接遍历两遍:先乘除后加减即可。
但是我代码却还是用的是栈,毕竟当初写代码的时候把事情想得太复杂了。
代码
#include <fstream>
#include <iostream>
#include <stack>
using namespace std;
int main() {
char data[10];
int n;
// fstream cin("D:/Codes/C_Code/Algorithm/CCF/201903-2.dat");
cin >> n;
// getchar();
int v1 = -1, v2 = -1, last, ans[20], pos;
char op;
for (int i = 0; i < n; i++) {
pos = 0;
cin >> data;
// cout << data << endl;
v1 = data[0] - '0';
ans[pos++] = v1;
for (int j = 1; j < 6; j += 2) {
op = data[j];
v2 = data[j + 1] - '0';
if (op == 'x' || op == '/') {
v1 = ans[--pos];
if (op == 'x')
ans[pos++] = v1 * v2;
else
ans[pos++] = v1 / v2;
} else {
ans[pos++] = op;
ans[pos++] = v2;
}
}
last = 0;
while (last < pos - 1 && pos > 2) {
v1 = ans[last++];
op = ans[last++];
v2 = ans[last++];
if (op == '+') {
ans[--last] = v1 + v2;
} else
ans[--last] = v1 - v2;
}
v1 = ans[last];
if (v1 == 24) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}