CCF201903-2二十四点,这代码真够弱智的,用栈好多了

1.320行的弱智代码,想着写都写了,改到满分再说,没想到真垃圾。不过理解是肯定好理解。就是暴力

#include<stdio.h>
#include<stdlib.h>
int atoint(char c)
{
    return c-'0';
}
int main()
{
    int n,i,num,j,num1;
    char c;
    char str[8];
    scanf("%d",&n);
    scanf("%c",&c);
    int fruit[n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<8;j++)
        {
            scanf("%c",&str[j]);
        }
        if(str[1]=='x')
        {
            num=atoint(str[0])*atoint(str[2]);
            if(str[3]=='x')
            {
                num=num*atoint(str[4]);
                if(str[5]=='x')
                    num=num*atoint(str[6]);
                else if(str[5]=='/')
                    num=num/atoint(str[6]);
                else if(str[5]=='+')
                    num=num+atoint(str[6]);
                else if(str[5]=='-')
                    num=num-atoint(str[6]);
            }else if(str[3]=='/')
            {
                num=num/atoint(str[4]);
                if(str[5]=='x')
                    num=num*atoint(str[6]);
                else if(str[5]=='/')
                    num=num/atoint(str[6]);
                else if(str[5]=='+')
                    num=num+atoint(str[6]);
                else if(str[5]=='-')
                    num=num-atoint(str[6]);
            }else if(str[3]!='/'&&str[3]!='x'){
                if(str[5]=='x')
                {
                    num1=atoint(str[4])*atoint(str[6]);
                    if(str[3]=='+')
                        num=num+num1;
                    else if(str[3]=='-')
                        num=num-num1;
                }else if(str[5]=='/')
                {
                    num1=atoint(str[4])/atoint(str[6]);
                    if(str[3]=='+')
                        num=num+num1;
                    else if(str[3]=='-')
                        num=num-num1;
                }else if(str[5]!='/'&&str[5]!='x')
                {
                    if(str[3]=='+')
                    {
                        num=num+atoint(str[4]);
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);

                    }else if(str[3]=='-')
                    {
                        num=num-atoint(str[4]);
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);
                    }
                }
            }
        }
        else if(str[1]=='/')
        {
            num=atoint(str[0])/atoint(str[2]);
            if(str[3]=='x')
            {
                num=num*atoint(str[4]);
                if(str[5]=='x')
                    num=num*atoint(str[6]);
                else if(str[5]=='/')
                    num=num/atoint(str[6]);
                else if(str[5]=='+')
                    num=num+atoint(str[6]);
                else if(str[5]=='-')
                    num=num-atoint(str[6]);
            }else if(str[3]=='/')
            {
                num=num/atoint(str[4]);
                if(str[5]=='x')
                    num=num*atoint(str[6]);
                else if(str[5]=='/')
                    num=num/atoint(str[6]);
                else if(str[5]=='+')
                    num=num+atoint(str[6]);
                else if(str[5]=='-')
                    num=num-atoint(str[6]);
            }else if(str[3]!='/'&&str[3]!='x'){
                if(str[5]=='x')
                {
                    num1=atoint(str[4])*atoint(str[6]);
                    if(str[3]=='+')
                        num=num+num1;
                    else if(str[3]=='-')
                        num=num-num1;
                }else if(str[5]=='/')
                {
                    num1=atoint(str[4])/atoint(str[6]);
                    if(str[3]=='+')
                        num=num+num1;
                    else if(str[3]=='-')
                        num=num-num1;
                }else if(str[5]!='/'&&str[5]!='x'){
                    if(str[3]=='+')
                    {
                        num=num+atoint(str[4]);
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);

                    }else if(str[3]=='-')
                    {
                        num=num-atoint(str[4]);
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);
                    }
                }
            }
        }
        else if(str[1]!='x'&&str[1]!='/'){
            if(str[3]=='x')
            {
                num=atoint(str[2])*atoint(str[4]);
                if(str[5]=='x')
                {
                    num=num*atoint(str[6]);
                    if(str[1]=='+')
                        num=atoint(str[0])+num;
                    else if(str[1]=='-')
                        num=atoint(str[0])-num;
                }
                else if(str[5]=='/')
                {
                    num=num/atoint(str[6]);
                    if(str[1]=='+')
                        num=atoint(str[0])+num;
                    else if(str[1]=='-')
                        num=atoint(str[0])-num;
                }
                else if(str[5]!='/'&&str[5]!='x'){
                    if(str[1]=='+')
                    {
                        num=atoint(str[0])+num;
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);

                    }else if(str[1]=='-')
                    {
                        num=atoint(str[0])-num;
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);
                    }
                }
            }
            else if(str[3]=='/')
            {
                num=atoint(str[2])/atoint(str[4]);
                if(str[5]=='x')
                {
                    num=num*atoint(str[6]);
                    if(str[1]=='+')
                        num=num+atoint(str[0]);
                    else if(str[1]=='-')
                        num=atoint(str[0])-num;
                }
                else if(str[5]=='/')
                {
                    num=num/atoint(str[6]);
                    if(str[1]=='+')
                        num=num+atoint(str[0]);
                    else if(str[1]=='-')
                        num=atoint(str[0])-num;
                }
                else if(str[5]!='/'&&str[5]!='x'){
                    if(str[1]=='+')
                    {
                        num=atoint(str[0])+num;
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);

                    }else if(str[1]=='-')
                    {
                        num=atoint(str[0])-num;
                        if(str[5]=='+')
                            num=num+atoint(str[6]);
                        else if(str[5]=='-')
                            num=num-atoint(str[6]);
                    }
                }
            }
            else if(str[3]!='x'&&str[3]!='/'){
                if(str[5]=='x')
                {
                    num=atoint(str[4])*atoint(str[6]);
                    if(str[1]=='+')
                    {
                        num1=atoint(str[0])+atoint(str[2]);
                        if(str[3]=='+')
                            num=num+num1;
                        else if (str[3]=='-')
                            num=num1-num;
                    }else if(str[1]=='-')
                    {
                        num1=atoint(str[0])-atoint(str[2]);
                        if(str[3]=='+')
                            num=num+num1;
                        else if (str[3]=='-')
                            num=num1-num;
                    }
                }
                else if(str[5]=='/')
                {
                    num=atoint(str[4])/atoint(str[6]);
                    if(str[1]=='+')
                    {
                        num1=atoint(str[0])+atoint(str[2]);
                        if(str[3]=='+')
                            num=num+num1;
                        else if(str[3]=='-')
                            num=num1-num;
                    }else if(str[1]=='-')
                    {
                        num1=atoint(str[0])-atoint(str[2]);
                        if(str[3]=='+')
                            num=num+num1;
                        else if(str[3]=='-')
                            num=num1-num;
                    }
                }
                else if(str[5]!='x'&&str[5]!='/'){
                    if(str[1]=='+')
                    {
                        num=atoint(str[0])+atoint(str[2]);
                        if(str[3]=='+')
                        {
                            num=num+atoint(str[4]);
                            if(str[5]=='+')
                                num=num+atoint(str[6]);
                            else if(str[5]=='-')
                                num=num-atoint(str[6]);

                        }else if(str[3]=='-')
                        {
                            num=num-atoint(str[4]);
                            if(str[5]=='+')
                                num=num+atoint(str[6]);
                            else if(str[5]=='-')
                                num=num-atoint(str[6]);
                        }
                    }else if(str[1]=='-'){
                        num=atoint(str[0])-atoint(str[2]);
                        if(str[3]=='+')
                        {
                            num=num+atoint(str[4]);
                            if(str[5]=='+')
                                num=num+atoint(str[6]);
                            else if(str[5]=='-')
                                num=num-atoint(str[6]);

                        }else if(str[3]=='-')
                        {
                            num=num-atoint(str[4]);
                            if(str[5]=='+')
                                num=num+atoint(str[6]);
                            else if(str[5]=='-')
                                num=num-atoint(str[6]);
                        }
                    }
                }
            }
        }
        fruit[i]=num;
    }
    for(i=0;i<n;i++)
    {
        if(i!=n-1)
        {
            if(fruit[i]==24)
                printf("Yes\n");
            else
                printf("No\n");
        }else
        {
            if(fruit[i]==24)
                printf("Yes");
            else
                printf("No");
        }
    }
    return 0;
}

2.还是用栈才是正确的做法。
注意如下:
(1)c语言读入字符时,用scanf("%c",&c);把空格给读掉
(2)若是数字则直接放入数字栈中;①若是“+”则直接把“+”入符号栈;②若是“-”则把“-"改变为”+“入符号栈,并且把其后面的数字添加负号存入数字栈中;③若是”x”或者“/”则直接就计算起来,并把结果存入数字栈。注意:②③中操作结束后紧接着就j++,因为后面的数字已经被用了。①②③整体结束后j++是为了整体往后走。
(3)最后符号栈内的加法做完即可。

#include<stdio.h>
#include<stdlib.h>
int atoint(char c)
{
    return c-'0';
}
int main()
{
    int n,i,lnum,j,rnum;
    char c;
    char str[8];
    scanf("%d",&n);
    scanf("%c",&c);
    int fruit[n];
    int stack1[4];
    char stack2[3];
    int top1=-1;
    int top2=-1;
    for(i=0;i<n;i++)
    {
        for(j=0;j<8;j++)
        {
            scanf("%c",&str[j]);
        }
        j=0;
        top1=-1;
        top2=-1;
        while(j<7)
        {
            if((atoint(str[j])>=0)&&(atoint(str[j])<=9))
                stack1[++top1]=atoint(str[j]);
            else{
                if(str[j]=='+')
                    stack2[++top2]=str[j];
                else if(str[j]=='-')
                {
                    stack1[++top1]=atoint(str[j+1])*(-1);
                    stack2[++top2]='+';
                    j++;
                }
                else if(str[j]=='x'){
                    lnum=stack1[top1--];
                    rnum=atoint(str[j+1]);
                    stack1[++top1]=lnum*rnum;
                    j++;
                }else if(str[j]=='/'){
                    lnum=stack1[top1--];
                    rnum=atoint(str[j+1]);
                    stack1[++top1]=lnum/rnum;
                    j++;
                }
            }
            j++;
        }
        while(top2!=-1)
        {
            rnum=stack1[top1--];
            lnum=stack1[top1--];
            stack1[++top1]=lnum+rnum;
            top2--;
        }
        fruit[i]=stack1[0];

    }
    for(i=0;i<n;i++)
    {
        if(i!=n-1)
        {
            if(fruit[i]==24)
                printf("Yes\n");
            else
                printf("No\n");
        }else
        {
            if(fruit[i]==24)
                printf("Yes");
            else
                printf("No");
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值