求助!好迷啊,例子和测试点都没问题,还是全部WA

P1957 口算练习题

dongtian @ 2023-03-15 00:14:06

#include<bits/stdc++.h>
using namespace std;
char ch1[100][1000];
int a[10000],b[100][1000];
int main()
{
    int n,m,j;
    char ch2;
    cin>>n;
    scanf("%c",&ch2);
    for(int i=0;i<n;i++)
    {
        for(int j=0;;j++)
        {
            scanf("%c",&ch1[i][j]);
            if(ch1[i][j]=='\n')
            break;
        }
    }
    for(int i=0;i<n;i++)
    {
        j=0;
        if(ch1[i][0]=='a'||ch1[i][0]=='b'||ch1[i][0]=='c')
        j=2;
        while(ch1[i][j]<='9'&&ch1[i][j]>='0')
        {
            b[i][0]+=(ch1[i][j]-'0');
            b[i][0]*=10;
            j++;
        }
        b[i][0]/=10;
        j++;
        while(ch1[i][j]<='9'&&ch1[i][j]>='0')
        {
            b[i][1]+=ch1[i][j]-'0';
            b[i][1]*=10;
            j++;
        }
        b[i][1]/=10;
        if(ch1[i][0]<='9'&&ch1[i][0]>='0')
        {
            ch1[i][0]=ch1[i-1][0];
            b[i][4]+=2;
        }

        if(ch1[i][0]=='a')
        {
            b[i][3]=b[i][0]+b[i][1];
            m=b[i][3];
            while(m>0)
            {
                m/=10;
                b[i][4]++;
            }
            b[i][5]=strlen(ch1[i])+b[i][4]-2;
            cout<<b[i][0]<<"+"<<b[i][1]<<"="<<b[i][3]<<endl<<b[i][5]<<endl;
        }
        if(ch1[i][0]=='b')
        {
            b[i][3]=b[i][0]-b[i][1];
            if(b[i][3]<0)
            b[i][4]++;
            m=sqrt(b[i][3]);
            while(m>0)
            {
                m/=10;
                b[i][4]++;
            }
            b[i][5]=strlen(ch1[i])+b[i][4];
            cout<<b[i][0]<<"-"<<b[i][1]<<"="<<b[i][3]<<endl<<b[i][5]<<endl;
        }
        if(ch1[i][0]=='c')
        {
            b[i][3]=b[i][0]*b[i][1];
            m=b[i][3];
            while(m>0)
            {
                m/=10;
                b[i][4]++;
            }
            b[i][5]=strlen(ch1[i])+b[i][4]-2;
            cout<<b[i][0]<<"*"<<b[i][1]<<"="<<b[i][3]<<endl<<b[i][5]<<endl;
        }
    }
    return 0;
}

by 654179_qwq @ 2023-03-15 00:21:17

@dongtian 不需要用 string 吧 , 输出的时候直接统计就行了

从网上找一份快读代码

void write(int x)
{
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
    return;
}

全局变量设一个 a , 快读里 putchar 全部跟上一个 a++ 统计 , 再加上 +/-/*,= 两个字符就可以知道输出长度 , 不需要再统计


by dongtian @ 2023-03-15 12:35:29

@654179_qwq 可是是全部WA,不是TLE


by coolboydengjun @ 2023-03-17 16:56:51

int n;//4的后面有\n\r连个字符
string s;
cin>>n;
getchar();//丢\n
getchar();//丢\r
getline(cin,s);
if(s.back()=='\r') //读到的每一行都有一个\r
    s.pop_back();

为了这个程序专门用vscode 在wsl-ubuntu上debug,搭建环境用了半天,linux不喜欢getline。


|