# P1320 压缩技术(续集版)

P1320 压缩技术(续集版)

压缩技术(续集版)

题目描述

设某汉字由 N × N N \times N N×N 0 \texttt 0 0 1 \texttt 1 1 的点阵图案组成。

我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个 0 \texttt 0 0,第二个数表示接下来连续有几个 1 \texttt 1 1,第三个数再接下来连续有几个 0 \texttt 0 0,第四个数接着连续几个 1 \texttt 1 1,以此类推……

例如: 以下汉字点阵图案:

0001000
0001000
0001111
0001000
0001000
0001000
1111111

对应的压缩码是: 7   3   1   6   1   6   4   3   1   6   1   6   1   3   7 \texttt {7 3 1 6 1 6 4 3 1 6 1 6 1 3 7} 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一个数是 N N N ,其余各位表示交替表示0和1 的个数,压缩码保证 N × N = N \times N= N×N= 交替的各位数之和)

输入格式

汉字点阵图(点阵符号之间不留空格)。

输出格式

输出一行,压缩码。

样例 #1

样例输入 #1

0001000
0001000
0001111
0001000
0001000
0001000
1111111

样例输出 #1

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

提示

数据保证, 3 ≤ N ≤ 200 3\leq N\leq 200 3N200

分析:
使用数组a储存字点阵图案,因为有换行,所以用strcat函数把它们放在一起;

#include<stdio.h>
#include<string.h>
#include<math.h>
char a[40005], b[205];//在全局定义,默认值为’\0’
int main()
{

int i = 0, n, count = 1;
scanf("%s", b);
n = strlen(b);
strcat(a, b);//将b连接到a后;
for (i = 1; i < n; i++)//因为已经连接第一个了,因此循环从第二行字符开始
{
	scanf("%s", b);
	strcat(a, b);//输入并连接
}
printf("%d ", n);//输出n值,每个输出后带上空格

if (a[0] == '1')//坑点:题目要求压缩码第一位(除去n)为表示有字点阵图案一开始有多少零,若一开始没有0,则第一位为0;
	printf("0 ");
for (i = 0; i < strlen(a) - 1; i++)
{				
	
	if (a[i] == a[i + 1])//判断这个字符是否与下一个字符相等
		count++;//如果相等,count+1;

	else
	{
		printf("%d ", count);//如果不相等,则打印count;
		count = 1;//重置
	}
}
//printf("%d\n", count);//莫忘最后,没有不相等的条件了,所以要额外打印
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值