洛谷P1319压缩技术-代码求纠错

img

img


十个测试点全超时了,不知道怎么改,求大家指点。代码如下

#include <stdio.h>

int main()
{
int code[1000] = { 0 }; //code[0]是方阵边长
int i = 0;

char ch;

do {
    scanf("%d%c", &code[i], &ch);         //输入编码
    i++;
} while (ch != '\n');

int count = 0;         //count记录当前输出的总个数,每当等于code[0]的倍数 换行
int x = 0;             //x是方阵中输出的数字,是1或0
int c;                 //c为本次输出x的个数,即code[i]



for (i = 1; count != code[0] * code[0]; i++)
{
    c = code[i];

    while (c)
    {
        printf("%d", x);
        count++;
        if (count % (code[0]) == 0)
            printf("\n");
      
        c--;
    }

    if (x == 1)           //改变输出内容x
        x = 0;
    else
        x = 1;

}


return 0;

}

输入的代码这么改下试试:

#include <stdio.h>
int main()
{
    int code[1000] = { 0 }; //code[0]是方阵边长
    int i = 0, n, sum = 0;
    char ch;
    scanf("%d", &n);
    while (sum != n * n) {
        scanf("%d", &code[i]);
        sum += code[i];
        i++;
    }
    //do {
    //    scanf("%d%c", &code[i], &ch);         //输入编码
    //    i++;
    //} while (ch != '\n');
    int count = 0;         //count记录当前输出的总个数,每当等于code[0]的倍数 换行
    int x = 0;             //x是方阵中输出的数字,是10
    int c;                 //c为本次输出x的个数,即code[i]
    for (i = 0; count != n * n; i++)
    {
        c = code[i];
        while (c)
        {
            printf("%d", x);
            count++;
            if (count % n == 0)
                printf("\n");
            c--;
        }
        if (x == 1)           //改变输出内容x
            x = 0;
        else
            x = 1;
    }
    return 0;
}

你写的好像和题目要求不是一回事啊
你应该先输入一个整数为N,然后根据后面的数字,对code数组进行连续0或1的填充。填充完后再按N的大小逐行输出

请看👉 :洛谷P1319 压缩技术