zoukankan      html  css  js  c++  java
  • CCF CSP 2019032 二十四点

    题目背景

    二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上的运算结果为24。

    题目描述

    定义每一个游戏由4个从1-9的数字和3个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加分用符号+表示,减法用符号-表示,乘法用小写字母x表示,除法用符号/表示。在游戏里除法为整除,例如2/3=0,3/2=4,4/2=2。

    老师给了你n个游戏的解,请你编写程序验证每个游戏的结果是否为24。

    输入格式

    从标准输入读入数据。

    第一行输入一个整数n,从第2行开始开始到第n+1行中,每一行包含一个长度为7的字符串,为上述的24点游戏,保证数据格式合法。

    输出格式

    从标准输入读入数据。

    第一行输入一个整数n,从第2行开始到第n+1行中,每一行包含一个长度为7的字符串,为上诉的24点游戏,保证数据格式合法。

    输出格式

    输出到标准输出。

    包含n行,对于每一个游戏,如果其结果为24则输出字符串yes,否则输出字符串No。

    样例1输入

    10
    9+3+4×3
    5+4×5×5
    7-9-9+8
    5×6/5×4
    3+5+7+9
    1×1+9-9
    1×9-5/9
    8/5+6×9
    6×7-3×6
    6×4+4/5
    

    样例1输出

    Yes
    No
    No
    Yes
    Yes
    No
    No
    No
    Yes
    Yes
    

    样例1解释

    9+3+4×3=24

    5+4×5×5=105

    7-9-9+8=-3

    5×6/5×4=24

    3+5+7+9=24

    1×1+9-9=1

    1×9-5/9=9

    8/5+6×9=55

    6×7-3×6=24

    6×4+4/5=24

    子任务

    代码

    #include<stdio.h>
    #include<iostream>
    #include<stack>
    using namespace std;
    int main()
    {
        int n;
        string s;
        scanf("%d",&n);
        while(n--)
        {
            stack<int>q;
            cin>>s;
            int an=1;
            for(int i=0; i<(int)s.size(); i++)
            {
                if(s[i]>='0'&&s[i]<='9')
                {
                    //做加减法
                    q.push(an*(s[i]-'0'));
                }
                else if(s[i]=='+'||s[i]=='-')
                {
                    //存储加减法的符号
                    if(s[i]=='-')
                        an=-1;
                    else an=1;
                }
                else
                {
                    //计算乘除法
                    int a=q.top();
                    q.pop();
                    i++;
                    int b=s[i]-'0';
                    if(s[i-1]=='/')
                    {
                        q.push(a/b);
                    }
                    else
                    {
                        q.push(a*b);
                    }
                }
            }
            int ans=0;
            while(!q.empty())
            {
                //取出栈的顶部就是最后的计算结果
                ans+=q.top();
                q.pop();
            }
            if(ans==24)
                printf("Yes\n");
            else printf("No\n");
        }
        return 0;
    }
    
  • 相关阅读:
    layui穿梭框内容溢出解决办法
    location之alias浅析
    Semaphore和SemaphoreSlim实现并发同步
    Barrier实现并发同步
    CountdownEvent实现并发同步
    AutoResetEvent实现并发同步
    TrieTree树
    EncryptByPassPhrase与DecryptByPassPhrase的浅说
    一个mp4转gif的网站
    vue轮播图(可随父元素高宽自适应)
  • 原文地址:https://www.cnblogs.com/zhangzizi/p/14450655.html
Copyright © 2011-2022 走看看