全RE求救

P1319 压缩技术

AlbusRiddle @ 2024-12-02 17:29:35

大佬们,这是怎么回事啊。。。我寻思着也没有空指针啊。。。

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int n,len,tmp=0,cnt;
    short flag=0;
    scanf("%d",&n);
    short *a=(short *)malloc(n*n*sizeof(short)+10);
    getchar();
    while(1)
    {
        scanf("%d",&len);
        for(int i=tmp;i<(tmp+len);i++)
        {
            a[i]=flag;
        }
        flag=1-flag;
        tmp+=len;
        if(getchar()=='\n')break;
    }
    cnt=0;
    for(int i=0;i<(n*n);i++)
    {
        printf("%hd",a[i]);
        cnt++;
        if(cnt==n)
        {
            cnt=0;
            printf("\n");
        }
    }
    return 0;
}

by AlbusRiddle @ 2024-12-02 17:30:23

我在自己电脑上一点问题都没有。。。


by zhangyangrui6580 @ 2024-12-05 18:20:05

@[AlbusRiddle](luogu://user/1449687

#include<iostream>
#include<cstring>//事实上没有用
using namespace std;
int main()
{
    int n;
    cin>>n;
    //矩阵长宽
    int Map[n*n+10];
    //设置一个登记用的数组,其实n*n就够了,+10是为了防爆
    int Full;//输入要用的
    bool Key=false;
    //判断当前输入的是1的数量还是0的数量,初始为0
    int p=0;
    //已经登记到第几个数,类似于指针
    while(cin>>Full)//持续输入
    {
        int i;
        for(i=p;i<p+Full;i++)
            Map[i]=Key;//把这一块区域登记为Key,就是0或1
        p=i;
        Key=!Key;
        //本文唯一难点,
        /*
         *“!”表示相反,
         *如果原先为true就变为false
         *如果原先为false就变为true
         *这里就把“0和1的数量交替输入”体现出来了
         */
    }
    p=0;
    //指针归零,下面要开始从头开始输入
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<Map[p];
            p++;
            //输出
        }
        cout<<endl;
        /*按格式输出*/
    }

}

|