题解 P1319 【压缩技术】

看到题解里的代码大多较长,一时心痒就来发一发,其实这题不需要用数组,直接边输入边输出就好,不多说,上代码

#include<cstdio>
using namespace std;
int main()
{
    int i,j,n,m,s=0,k=-1;
    scanf("%d",&n);//先确定范围么,这个都懂
    s=n*n;//计算一共有多少数字
    j=n;//j用来记录是否输出满一行
    while(s)//循环走起
    {
        scanf("%d",&m);
        s-=m;//因为题目说过保证n*n等于后面各个数字之和,这样我们就可以输一个减一个,当s=0了就说明输入完了
        k++;//k用来记录该输出1还是0,因为第一个肯定是输出0,那么我们就把k初始化为-1,每次输入就++,这样mod2就是我们要输出的数了
        for(i=1;i<=m;i++)
        {
            j--;//记录这行输出的个数
            printf("%d",k%2);//k%2即0或1
            if(!j)//如果j为0了就说明该换行了
                printf("\n",j=n);//输出换行符顺便将j赋值为n
        }
    }
    return 0;//end
}

发表于 2017-10-17 13:45:26 in 题解