P1319 压缩技术(C语言)

tech2023-06-04  99

题目描述

设某汉字由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)

输入输出样例
输入

7 3 1 6 1 6 4 3 1 6 1 6 1 3 7

输出

0001000 0001000 0001111 0001000 0001000 0001000 1111111


题解

#include <stdio.h> int main(void) { int n,i=1,k=1,count=0,count2=0,flag=0; scanf("%d",&n); int a[n*n]; while((scanf("%d",&a[i]))!=EOF) { i++; count++; } if(a[1]==0)//存在矩阵第一个数字为1的情况 { flag=1; k++; } for(i=1;i<=n*n;i++) { if(!flag) { printf("0"); count2++; if(count2==a[k]) { k++; count2=0; flag=1; } } else if(flag) { printf("1"); count2++; if(count2==a[k]) { k++; count2=0; flag=0; } } if(i%n==0) printf("\n"); } return 0; }

要点

1、输入不确定个整数可用while((scanf("%d",&a[i]))!=EOF) 2、当有行列要求时,最好将i初始化为1

最新回复(0)