一、題目

二、分析
這道題很簡單,就是一個運算器的簡化版,隻有10以内的數字,不包括括号和其他字元,字元串長度為7,資料格式保證合法,幾乎所有的坑都提前規避了,作為第二道題算是很簡單的,資料範圍也很小,是以做起來就很順,我也就沒把其中的一些功能函數化,直接一個main函數順下來的,是以可能一些代碼沒有那麼子產品化,比較難看,唉,是以我又加了一些注釋,我怎麼這麼貼心呢?
三、代碼
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
stack<char>Operator;//運算符棧
stack<int>data; //資料棧
char c; // 運算符輸入
int d; // 資料輸入
for(int j=0;j<7;j++)
{
if(!(j%2)) // 說明輸入的是資料
{
scanf("%d",&d);
data.push(d);
}
else //輸入的是運算符
{
scanf("%c",&c);
if((c=='x')||(c=='/')||(c=='-')) //運算符是乘除要先算 ,減的話要把後一個數變成(-1)*x
{
int d1,d2;
scanf("%d",&d1); //再次讀入一個資料
j+=1; //将記錄輸入次數加1
d2=data.top(); //取運算符前面的一個數字
data.pop();
if(c=='x')
{
d=d1*d2;
data.push(d);
}
else if(c=='/')
{
d=d2/d1;
data.push(d);
}
else
{
d=(-1)*d1;
data.push(d2);
data.push(d);
Operator.push('+');
}
}
else //運算符是加的話直接入棧,不做處理
{
Operator.push(c);
}
}
}
while(!Operator.empty()) //此時運算符棧裡隻有加,當棧清空時代表結果已經算出來了
{
int d,d1,d2;
char c;
d1=data.top();
data.pop();
d2=data.top();
data.pop();
c=Operator.top();
Operator.pop();
d=d1+d2;
data.push(d);
}
int da;
da=data.top();
if(da==24) printf("Yes\n");
else printf("No\n");
// printf("%d",da);
}
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
*/