201903-2-二十四点

题目

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

我的代码

#include <iostream>
#include<sstream>
#include<cstdlib>
#include<string>
using namespace std;
int main(int argc, char *argv[]) {
	int n,index,a,b,c,i,j;
	string str,substr;
	cin>>n;
	while(n--)
	{
		cin>>str;
		str=" "+str+" ";
		for(index=-1;str.find("/",index+1)!=str.npos||str.find("x",index+1)!=str.npos;)
		{
			if((str.find("/",index+1)<str.find("x",index+1)&&str.find("/",index+1)!=-1)||str.find("x",index+1)==-1)
			{
				index=str.find("/",index+1);
				for(i=index-1;i>=0;i--)
					if(str[i]<'0'||str[i]>'9')
						break;
				a=atoi(str.substr(i+1,index-i-1).c_str());
				for(j=index+1;str[j]!='\0';j++)
					if(str[j]<'0'||str[j]>'9')
						break;
				b=atoi(str.substr(index+1,j-1-index).c_str());
				c=a/b;
			}	
			else if((str.find("/",index+1)>str.find("x",index+1)&&str.find("x",index+1)!=-1)||str.find("/",index+1)==-1)
			{
				index=str.find("x",index+1);
				for(i=index-1;i>=0;i--)
					if(str[i]<'0'||str[i]>'9')
						break;
				a=atoi(str.substr(i+1,index-i-1).c_str());
				for(j=index+1;str[j]!='\0';j++)
					if(str[j]<'0'||str[j]>'9')
						break;
				b=atoi(str.substr(index+1,j-1-index).c_str());
				c=a*b;
			}
			stringstream ss;
			ss<<c;
			ss>>substr;
			str=str.substr(0,i+1)+substr+str.substr(j);
			index-=index-i-1;
		}
		while(str.find("+",2)!=str.npos||str.find("-",2)!=str.npos)
		{
			if((str.find("-",2)<str.find("+",2)&&str.find("-",2)!=str.npos)||str.find("+",2)==str.npos)
			{
				index=str.find("-",2);
				a=atoi((str.substr(1,index-1)).c_str());
				for(j=index+1;str[j]!='\0';j++)
					if(str[j]<'0'||str[j]>'9')
						break;
				b=atoi(str.substr(index+1,j-1-index).c_str());
				c=a-b;
				stringstream ss;
				ss<<c;
				ss>>substr;
				str=str.substr(0,1)+substr+str.substr(j);
			}
			else if((str.find("+",2)<str.find("-",2)&&str.find("+",2)!=str.npos)||str.find("-",2)==str.npos)
			{
				index=str.find("+",2);
				a=atoi((str.substr(1,index-1)).c_str());
				for(j=index+1;str[j]!='\0';j++)
					if(str[j]<'0'||str[j]>'9')
						break;
				b=atoi(str.substr(index+1,j-1-index).c_str());
				c=a+b;
				stringstream ss;
				ss<<c;
				ss>>substr;
				str=str.substr(0,1)+substr+str.substr(j);
			}
		}
		if(str==" 24 ")
			cout<<"Yes"<<endl;
		else
			cout<<"No"<<endl;
	}
	return 0;
}

我的思路

基本思路就是字符串处理,主要用到字符串find函数和截取substr函数:

  • 先算乘除法,例如2x4+1+4/5我会在乘除法循环里面将它变成8+1+0
  • 再算加减法,这里特别注意减法操作可能会出现负数,需要做不同处理

其实本题用栈解决可能会更方便些

发布了84 篇原创文章 · 获赞 0 · 访问量 2048

猜你喜欢

转载自blog.csdn.net/qq_41985293/article/details/104286761