题解 P1319 【压缩技术】
Iowa_BattleShip
2017-10-17 13:45:26
看到题解里的代码大多较长,一时心痒就来发一发,其实这题不需要用数组,直接边输入边输出就好,不多说,上代码
```cpp
#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
}
```