自己出的题自己不会了

:cold_face: :cold_face:

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》 :upside_down_face:

代码:

#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 个赞

你是会出题的,难度一下子就上去了

U486766 蛋语表达式(1) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
同步到洛谷上面了。大家可以提交了

这好像是AI生成的吧,要用unsigned long long的。

好好好,提交了错一个QwQ

要是剩下的数据炸long long或样例填错了,我真的会谢谢

怎么有点像垃圾分类???

不过没关系我也是蒟蒻

1 个赞

看见你洛谷了
已经更正数据,可以重新提交

啊?数据错了?谢谢你啊

此帖子已被社区举报,现已被临时隐藏。

别讨论了,不过这是回老帖