题解 P1319 【压缩技术】

Iowa_BattleShip

2017-10-17 13:45:26

Solution

看到题解里的代码大多较长,一时心痒就来发一发,其实这题不需要用数组,直接边输入边输出就好,不多说,上代码 ```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 } ```