201903-2 二十四点 100分 15ms

点击前往试题目录:https://blog.csdn.net/best335/article/details/99550556
在这里插入图片描述
这道题使用两个vector存储要计算的值和符号,然后计算出首先出现乘除的位置,然后计算结果,删掉值和符号,直到全部符号都计算过。

#include<iostream>
#include<vector>
using namespace std;
int calc(int& a,int& b,char& op){//计算 a op b
	switch(op){
		case '+':
			return a+b;
		case '-':
			return a-b;
		case '/'://对除0做特殊处理
			return b==0?-10000:(a/b);
	}
	return a*b;
}
int main(){
	int n,ans,idx;
	string s;
	cin>>n,cin.get();
	for(int i=0;i<n;++i){
		getline(cin,s);
		vector<int> v;//顺序存储要计算的值
		vector<char> c;//顺序存储要计算的符号
		for(int i=0;i<7;i+=2) v.emplace_back(s[i]-'0');
		for(int i=1;i<7;i+=2) c.emplace_back(s[i]);
		while(v.size()>1){//循环计算 直到所有的符号计算完毕
			for(int i=idx=0,ni=c.size();i<ni;++i,++idx) if(c[i]=='x'||c[i]=='/') break;//找到第一个优先的符号
			if(idx==c.size()) idx=0;//如果都为-+
			v[idx]=calc(v[idx],v[idx+1],c[idx]),v.erase(v.begin()+idx+1),c.erase(c.begin()+idx);//计算结果 清除值和符号
		}
		cout<<(v[0]==24?"Yes":"No")<<endl;
	}
	return 0;
}
/*
10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5
*/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值