P1319 压缩技术

题目描述
设某汉字由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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值