首页 > 其他 > 详细

ccf 20190302

时间:2020-01-09 20:36:05      阅读:94      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

题解:重点是考虑运算符号的优先级,乘除优于加减。

用栈来维护,最后在把栈里的元素相加

①遇到数字直接进栈

②遇到负号,取下一个数的相反数进栈,然后跳过下一个数

③遇到乘号,取弹出栈顶元素p,取下一个元素q,计算p*q进栈,跳过下一个数

④遇到除号,取弹出栈顶元素p,取下一个元素q,计算p/q进栈,跳过下一个数

⑤最后,栈非空时,累加,得到的结果和24对比即可

注意:字符串的字符-‘0‘即可得到相应的整数;还有栈没有clear()

 

#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    stack<int> num;
    int r;
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=1;i<=n;i++){
            cin >> s;
            r=0;
            for(int j=0;j<7;j++){
                if(s[j]-0 >=0 && s[j]-0<=9)    num.push(s[j]-0);
                if(s[j]==-){
                    int k = s[j+1]-0;    
                    k=-k;            //取下一个数的相反数放入栈中,当成负数 
                    num.push(k);
                    j++;        //直接跳过下一个数 
                }
                if(s[j]==x){        //乘除直接计算,压到栈里 
                    int p=num.top();
                    num.pop();
                    int q=s[j+1] -0;
                    int t=p*q;
                    num.push(t);
                    j++;
                }
                if(s[j]==/){
                    int p=num.top();
                    num.pop();
                    int q=s[j+1] -0;
                    int t=p/q;
                    num.push(t);
                    j++;
                }                
            }
            while(!num.empty()){
                int t=num.top();
                num.pop(); 
                r+=t;
            }
            if(r==24)    printf("Yes\n");
            else    printf("No\n");
        }
    }
    return 0;
}

ccf 20190302

原文:https://www.cnblogs.com/shiliuxinya/p/12172601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!