题目描述
设某汉字由N × N的0和1的点阵图案组成。
我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数再接下来连续有几个0,第四个数接着连续几个1,以此类推……
例如: 以下汉字点阵图案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
对应的压缩码是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一个数是N ,其余各位表示交替表示0和1 的个数,压缩码保证 N × N=交替的各位数之和)
输入格式
一行,压缩码。
输出格式
汉字点阵图(点阵符号之间不留空格)。(3<=N<=200)
输入输出样例
输入 #1复制
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
输出 #1复制
0001000
0001000
0001111
0001000
0001000
0001000
1111111
#include <stdio.h>
int main ()
{
int n,s=0,i,j,a[40005],mark=0,num;
scanf("%d",&n);
for(i=0;i<205;i++)
{
if(s>=n*n)break;
scanf("%d",&num);
s+=num;//循环读取输入num;s为所有num的总和;当s=n*n时,说明全部输入完毕,于是break退出循环
if(i%2==0)//因为题目要求0,1交替输出,所以用i来判断;若i为偶数则输出0;若i为奇数则输出1;
{
for(j=mark;j<mark+num;j++)//mark用来记录待输入数在数组中的位置
{
a[j]=0;//赋值为0;
}
}
if(i%2==1)//若i为奇数则输出1;
{
for(j=mark;j<mark+num;j++)
{
a[j]=1;//赋值为1;
}
}
mark+=num;//mark是记录位置的所以要递加
}
for(i=1;i<=n*n;i++)
{
printf("%d",a[i-1]);
if(i%n==0)//每输出n个数,就要换行
printf("\n");
}
return 0;
}