1 个赞
数据3、6是不是有问题?
我怎么算都不对啊:
原数据3:
IN:
7
91EG3Y1
OUT:
17
//式子应该是91/3*1
//我认为的结果是30
原数据6:
IN:
6
30EG15Y20
OUT:
400
//式子应该是30/15*20
//我认为的结果是40
数据7如果要这样出:
原数据7:
IN:
9
9E8G7Y17E8
OUT:
-94
//式子是9+8-7*17+9
//直接按顺序计算:179
//按常规的一、二级运算进行计算:-94
则需要额外考虑的一、二级运算
那么至少题目要给,是直接按顺序计算,或按常规的一、二级运算进行计算
你这样例……我是不是还得写一、二级运算的情况 @孙鑫浩
1 个赞
阿巴阿巴
2 个赞
谢谢提示!
1 个赞
其实可以搞多组数据:D
1 个赞
本来想装X,手搓142行,可这个样例
爆了,好像只会输《NOT A EGGY》
代码:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <stack>
using namespace std;
// 检查蛋语是否合格
bool isQualified(const string &eggy) {
if (isdigit(eggy[0]) || isdigit(eggy[eggy.length() - 1])) {
return false;
}
int num_count = 0;
int letter_count = 0;
char last_letter = '\0';
for (int i = 0; i < eggy.length(); ++i) {
if (isdigit(eggy[i])) {
if (eggy[i] == '0' && num_count == 0) {
return false;
}
num_count++;
letter_count = 0;
} else {
if (eggy[i] != 'E' && eggy[i] != 'G' && eggy[i] != 'Y') {
return false;
}
if (last_letter == eggy[i]) {
return false;
}
if (letter_count == 2) {
return false;
}
letter_count++;
num_count = 0;
last_letter = eggy[i];
}
}
return true;
}
// 根据蛋语计算结果
int calculate(const string &eggy) {
vector<int> nums;
vector<char> ops;
stringstream ss;
for (int i = 0; i < eggy.length(); ++i) {
if (isdigit(eggy[i])) {
ss << eggy[i];
if (!isdigit(eggy[i + 1])) {
int num;
ss >> num;
nums.push_back(num);
ss.str("");
ss.clear();
}
} else {
if (eggy[i] == 'E') {
ops.push_back('+');
} else if (eggy[i] == 'G') {
ops.push_back('-');
} else if (eggy[i] == 'Y') {
ops.push_back('*');
} else if (eggy[i + 1] != '\0') {
if ((eggy[i] == 'E' && eggy[i + 1] == 'G') || (eggy[i] == 'G' && eggy[i + 1] == 'E')) {
ops.push_back('/');
} else if ((eggy[i] == 'E' && eggy[i + 1] == 'Y') || (eggy[i] == 'Y' && eggy[i + 1] == 'E')) {
ops.push_back('/');
} else if ((eggy[i] == 'G' && eggy[i + 1] == 'Y') || (eggy[i] == 'Y' && eggy[i + 1] == 'G')) {
ops.push_back('/');
}
i++;
}
}
}
stack<int> num_stack;
stack<char> op_stack;
num_stack.push(nums[0]);
for (int i = 0; i < ops.size(); ++i) {
if (op_stack.empty()) {
op_stack.push(ops[i]);
num_stack.push(nums[i + 1]);
} else {
if ((ops[i] == '*' || ops[i] == '/') && (op_stack.top() == '+' || op_stack.top() == '-')) {
op_stack.push(ops[i]);
num_stack.push(nums[i + 1]);
} else {
int num2 = num_stack.top();
num_stack.pop();
int num1 = num_stack.top();
num_stack.pop();
char op = op_stack.top();
op_stack.pop();
if (op == '+') {
num_stack.push(num1 + num2);
} else if (op == '-') {
num_stack.push(num1 - num2);
} else if (op == '*') {
num_stack.push(num1 * num2);
} else if (op == '/') {
num_stack.push(num1 / num2);
}
op_stack.push(ops[i]);
num_stack.push(nums[i + 1]);
}
}
}
while (!op_stack.empty()) {
int num2 = num_stack.top();
num_stack.pop();
int num1 = num_stack.top();
num_stack.pop();
char op = op_stack.top();
op_stack.pop();
if (op == '+') {
num_stack.push(num1 + num2);
} else if (op == '-') {
num_stack.push(num1 - num2);
} else if (op == '*') {
num_stack.push(num1 * num2);
} else if (op == '/') {
num_stack.push(num1 / num2);
}
}
return num_stack.top();
}
signed main(void)
{
int n;
string eggy;
cin >> n;
cin >> eggy;
if (!isQualified(eggy)) {
cout << "NOT A EGGY" << endl;
} else {
cout << calculate(eggy) << endl;
}
return 0;
}
求调
2 个赞
你请求的资源不存在或已被删除。若你刚刚上传了这个文件,请等1分钟再尝试访问。
可以了
数据3、6看一下,可能出错了:
原数据3:
IN:
7
91EG3Y1
OUT:
17
//式子应该是91/3*1
//我认为的结果是30
原数据6:
IN:
6
30EG15Y20
OUT:
400
//式子应该是30/15*20
//我认为的结果是40
1 个赞
你是会出题的,难度一下子就上去了
这好像是AI生成的吧,要用unsigned long long的。
好好好,提交了错一个QwQ
要是剩下的数据炸long long或样例填错了,我真的会谢谢
怎么有点像垃圾分类???
不过没关系我也是蒟蒻
1 个赞
看见你洛谷了
已经更正数据,可以重新提交
啊?数据错了?谢谢你啊
此帖子已被社区举报,现已被临时隐藏。
别讨论了,不过这是回老帖