目录
思路:
了解运算方法:
1、因为只有加减乘除,对于乘除运算只需要从左往右计算就可,同理加减也是。
2、乘除优先加减,所以先进行乘除运算,再进行加减运算。
实现方式:采用栈的方式stack
注意:这里进行减法运算可以看做一个负数的加法运算,所以我把减法都改成了加法的格式。
一、首先各个数字保存到栈里面,其中当遇到符号时做以下处理:
1、乘除:在入栈的时候直接与其相邻的两个数进行运算,然后对出现的结果保存到栈里面 。
2、加减:因为减法也是加法的一种形式,所以在入栈的时候把减法转成城加法,
二、在第一步乘除运算完了,减法也改成了加法的形式,所以只有加运算了,最后把栈里面剩余的数字进行求和,判断是否为24
题目:
样例:
AC代码:
#include <bits/stdc++.h>
#include <stack>
using namespace std;
int main()
{
int repeat;
int sum=0;
scanf("%d",&repeat);
getchar();
stack<int> p;
char a[8];
while(repeat--)
{
cin>>a;
for(int i=0;i<7;i++)
{
if(a[i]=='x')
{
sum=p.top()*(a[++i]-'0');
p.pop();
p.push(sum);
}
else if(a[i]=='/')
{
sum=p.top()/(a[++i]-'0');
p.pop();
p.push(sum);
}
else if(a[i]=='-')
{
p.push(-(a[++i]-'0'));
}
else if(a[i]=='+')
{
p.push(a[++i]-'0') ;
}
else
{
p.push(a[i]-'0');
}
}
int sum=0;
while(!p.empty())
{
sum+=p.top();
p.pop();
}
if(sum==24)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}