oWuJingTianZe12 2019-09-05 15:51 采纳率: 0%
浏览 684

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条回答

  • dabocaiqq 2019-09-06 08:34
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料