ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ccf考试前练手有感之 ccf24点

2021-12-03 23:03:23  阅读:180  来源: 互联网

标签:练手 24 stackk 48 int 游戏 tail ccf ccf24


难受,练个第二题自闭了,丢脸,在想要不要给设成私密

太多细节没有考虑到

1.循环中的初始化(去死吧!!!还是出这个问题,当初学选择排序就知道这东西,脸都丢完了)

2.char的数据范围,竟然都没算一下,在样例就爆了,样例挺良心

3.数字经过计算可能和运算符号的ascii码相同,所以要把数字和运算符分开来

 

总之,每个语句都要把当下所有情况考虑到

 

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

定义每一个游戏由 4 个从 1−9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。

其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。

在游戏里除法为整除(向下取整),例如 2/3=0,3/2=1,4/2=2,−3/7=−12/3=0,3/2=1,4/2=2,−3/7=−1。

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

输入格式

第一行输入一个整数 n。

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

输出格式

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

#include<bits/stdc++.h>
#define go(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
using namespace std;
char s[20];
int stackk[20];
int tail;
void push_backk(){
    tail=0;
    go(i,0,7){
        if(

           tail>=1
           &&(stackk[tail]=='x'||stackk[tail]=='/')
           &&i%2==0
           ){

            if(stackk[tail]=='x'){
                --tail;
                stackk[tail]=(stackk[tail]-48)*int(s[i]-48)+48;

            }

            else{
                --tail;
                stackk[tail]=(stackk[tail]-48)/(s[i]-48)+48;

            }
        }
        else{
            stackk[++tail]=s[i];

        }//printf("%d\n", stackk[tail]-48);

    }


}


void addsub(){
int ans=stackk[1]-48;
for(int i=3;i<=tail;i+=2){
    if(stackk[i-1]=='+')
        ans+=(stackk[i]-48);
    else
        ans-=(stackk[i]-48);

}

if(ans==24)
    printf("Yes\n");
else
    printf("No\n");

}

int main(){
//cout<<int('/')<<int('x');
int n;
cin>>n;
++n;
while(--n){
    scanf("%s",s);
    push_backk();
    addsub();

}



return 0;
}

 

标签:练手,24,stackk,48,int,游戏,tail,ccf,ccf24
来源: https://www.cnblogs.com/jiangbuyu/p/15640471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有