求助,本地试过了,第四个点是对的(下了样例),但是评测爆了

P5730 【深基5.例10】显示屏

卞云珑 @ 2021-08-18 08:40:18

#include<bits/stdc++.h>

using namespace std;
char a[10][500];
int b[200];
int main()
{
//  freopen("xxx.in","r",stdin);
//  freopen("xxx.out","w",stdout);
    int n;
    cin>>n;
    char s;
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        b[i]=s-'0';
    }
    for(int i=1;i<=n;i++)
    {
        if(b[i]==0)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1||j==5)a[j][k]='X';
                    else 
                        if(k==(i-1)*4+1||k==i*4-1) a[j][k]='x';
                        else a[j][k]='.';
        }
        if(b[i]==1)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(k==i*4-1)a[j][k]='X';
                    else 
                        a[j][k]='.';
        }
        if(b[i]==2)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || j==3 || j==5)a[j][k]='X';
                    else if(j==2 && k==i*4-1)a[j][k]='X';       
                    else if(j==4&&k==(i-1)*4+1)a[j][k]='X';
                    else a[j][k]='.';
        }
        if(b[i]==3)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || j==3 || j==5)a[j][k]='X';
                    else if((j==2 || j==4) && k==i*4-1)a[j][k]='X';     
                    else a[j][k]='.';
        }
        if(b[i]==4)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==3 || k==i*4-1)a[j][k]='X';
                    else if(1<=j&&j<=3&& k==(i-1)*4+1)a[j][k]='X';      
                    else a[j][k]='.';
        }
        if(b[i]==5)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || j==3 || j==5)a[j][k]='X';
                    else if(j==2 && k==(i-1)*4+1)a[j][k]='X';       
                    else if(j==4&&k==i*4-1)a[j][k]='X';
                    else a[j][k]='.';
        }
        if(b[i]==6)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || j==3 || j==5)a[j][k]='X';
                    else if(j==2 && k==(i-1)*4+1)a[j][k]='X';       
                    else if(j==4&&(k==i*4-1 || k==(i-1)*4+1))a[j][k]='X';
                    else a[j][k]='.';
        }
        if(b[i]==7)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || k==i*4-1)a[j][k]='X';
                    else a[j][k]='.';
        }
        if(b[i]==8)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || j==3 || j==5)a[j][k]='X';
                    else if(j==2 && (k==(i-1)*4+1 || k==i*4-1))a[j][k]='X';     
                    else if(j==4&&(k==i*4-1 || k==(i-1)*4+1))a[j][k]='X';
                    else a[j][k]='.';
        }
        if(b[i]==9)
        {
            for(int j=1;j<=5;j++)
                for(int k=(i-1)*4+1;k<=i*4;k++)     
                    if(j==1 || j==3 || j==5)a[j][k]='X';
                    else if(j==2 && (k==(i-1)*4+1 || k==i*4-1))a[j][k]='X';     
                    else if(j==4&&k==i*4-1)a[j][k]='X';
                    else a[j][k]='.';
        }
    }
    for(int i=1;i<=5;i++)
    {
        for(int j=1;j<=(4*n)-1;j++)
        {
            if(j%4==0) cout<<".";
            else cout<<a[i][j];
        }
        cout<<endl;
    }
    return 0;
}

by Fearliciz @ 2021-08-18 08:44:21

直接输出对应的数字啊,为什么要这样用for+判断呢?这样肯定容易错啊


by CarryQwQ @ 2021-08-18 08:53:19

能做这么复杂,判断加循环,就离谱。


by CarryQwQ @ 2021-08-18 08:54:25

@卞云珑 建议去看题解介绍的暴力方法,把 0~9 的点阵图案存起来然后处理字符串的时候直接输出不就好了吗。。。


by SunLegend @ 2021-08-18 09:28:02

if+建议手动输数字


|