当先锋百科网

首页 1 2 3 4 5 6 7

题目来源于CCF CSP


在这里插入图片描述
在这里插入图片描述


思路解析

这道题目和我以前数据结构作业类似,因此做的比较快,当然,这道题目的思路也比较简答,我采用的是使用vector容器,做类似栈的处理,先将乘除法运算,然后再次计算加减即可完成任务。


代码解析
#include<iostream>
#include<string>
#include<vector>
using namespace std;
string Value(string str, int& i)
{
	string num = "";
	for (; i < str.size(); ++i) {
		if (str[i] - '0' <= 9 && str[i] - '0' >= 0)
			num += str[i];
		else
			break;
	}
	return num;
}
bool Check(string str)
{
	int i = 0;
	vector<string> temp_str;
	temp_str.push_back(Value(str, i)); //装入第一个数 
	temp_str.push_back(string(1, str[i++]));//装入第一个符号 
	//消除乘除 
	while (i < str.size()) {
		if (temp_str.back() == "+" || temp_str.back() == "-") //当栈顶为加或者减时,放入下一个数 
		{
			temp_str.push_back(Value(str, i));
			if (i < str.size())
				temp_str.push_back(string(1, str[i++])); //装入下一个符号 
		}
		else { //符号为"x"或者"/" 时 
			string late_num = Value(str, i);  //后一个数 
			string Char = temp_str.back();  //运算符 
			temp_str.pop_back();  //弹出运算符 
			string pre_num = temp_str.back(); ///前一个数 
			temp_str.pop_back();  //弹出参加计算的数
			int num = 0;
			if (Char == "x") {
				num = stoi(late_num.c_str()) * stoi(pre_num.c_str());
			}
			else {
				num = stoi(pre_num.c_str()) / stoi(late_num.c_str());
			}
			string new_num_str = to_string(num);
			temp_str.push_back(new_num_str); //将计算结果重新放入栈中 
			if(i < str.size())
				temp_str.push_back(string(1, str[i++])); //装入下一个符号 
		}
	}
	//消除加减 
	string num_str = "";  //数值 
	string Char = "";  //符号 
	int num = 0;
	for (int i = 0; i < temp_str.size(); ++i) {
		if (i == 0)
			num += stoi(temp_str[i]);
		else {
			if (temp_str[i] == "+" || temp_str[i] == "-")
				Char = temp_str[i];
			else {
				if (Char == "+") {
					num += stoi(temp_str[i]);
				}
				else if (Char == "-") {
					num -= stoi(temp_str[i]);
				}
			}
		}
	}
	if (num == 24)
		return true;
	return false;
}
int main()
{
	int n;
	cin >> n;
	string str = "";
	for (int i = 0; i < n; ++i) {
		cin >> str;
		if (Check(str))
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
		str = "";
	}
	return 0;
}

测试结果
在这里插入图片描述