CCF 2019.3 二十四点 自己写了一个代码手打各种样例都没问题可是只有30分

图片说明

#include<iostream>
#include<stdio.h>

using namespace std;

int main(){
    int n;
    cin>>n;
    int **a=new int*[n];
    for(int i=0;i<n;i++){
        a[i]=new int[4];
    }

    char **b=new char*[n];
    for(int i=0;i<n;i++){
        b[i]=new char[4];
    }

    for(int i=0;i<n;i++){
//      cin>>a[i][0];
//      b[i][0]=getchar();
//      cin>>a[i][1];
//      b[i][1]=getchar();
//      cin>>a[i][2];
//      b[i][2]=getchar();
//      cin>>a[i][3];   

        scanf("%d%c%d%c%d%c%d",&a[i][0],&b[i][0],&a[i][1],&b[i][1],&a[i][2],&b[i][2],&a[i][3]);
    }

    for(int i=0;i<n;i++){
        int num1=4;//数字剩余的个数
        int num2=3;//字符个数 

        while(num1!=1){

            for(int j=0;j<num2;j++){
                if(b[i][j]=='x')a[i][j]=a[i][j]*a[i][j+1];
                else if(b[i][j]=='/')a[i][j]=a[i][j]/a[i][j+1];
                else if(j==num2-1&&b[i][j]=='+')a[i][j]=a[i][j]+a[i][j+1];
                else if(j==num2-1&&b[i][j]=='-')a[i][j]=a[i][j]-a[i][j+1];
                else continue;

                //符号和数字相对应,运算一次后,数字和符号都减少,保持靠左对齐,下面的操作是向左移位,保持紧凑
                for(int k=j+1;k<num1-1;k++){
                        a[i][k]=a[i][k+1];
                    }
                    num1--;
                for(int k=j;k<num2-1;k++){
                        b[i][k]=b[i][k+1];
                    }
                    num2--;
                break;
            }


        } 

        if(a[i][0]==24&&i!=n-1){
            cout<<"Yes"<<endl;
        }
        else if(a[i][0]==24&&i==n-1){
            cout<<"Yes";
        }
        else if(a[i][0]!=24&&i!=n-1){
            cout<<"No"<<endl;
        }
        else cout<<"No";
    }

    return 0;
}

我本人的思路不是网上常用的堆栈的方法,利用的是两个普通数组进行的,一个存数字,一个存符号
先把除法和乘法扫描出来运算,转化成加法减法,每一次运算后保持进行移位靠左对齐保证数字和运算符对应,
希望有能力的大佬帮忙解答一下

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!