[2021.11.22]UPC-2021级计算机2021随堂测验第五场18490 Problem A 压缩技术

题目描述

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

输出

一行,压缩码。

样例输入 Copy

0001000
0001000
0001111
0001000
0001000
0001000
1111111

样例输出 Copy

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

题目其实并不算难...然而依旧一路WA到底,错误的地方在于没读懂题意,第一个数是N ,其余各位表示交替表示0和1 的个数

所以如果第一位以1开头,要输出0。表示有0个0

下面是代码:)

#include <cstdio>
using namespace std;
int main()
{
    long long int i,j,cnt=0,cnt1=0,cnt2=0;
    char a[210][210],t;
    while(scanf("%s",&a[cnt++])!=EOF);
    cnt--;
    t='0';
    printf("%lld ",cnt);
    for(i=0;i<cnt;i++){
            for(j=0;j<cnt;j++){
                 if(a[i][j]=='0'){
                    cnt1++;
                }
                else if(a[i][j]=='1'){
                    cnt2++;
                }
                if(a[i][j]!=t){
                    if(t=='0'){
                        printf("%lld ",cnt1);
                        cnt1=0;
                        t='1';
                    }
                    else{
                        printf("%lld ",cnt2);
                        cnt2=0;
                        t='0';
                    }
                }
        }
    }
    if(cnt1)
        printf("%lld",cnt1);
    if(cnt2)
        printf("%lld",cnt2);
    return 0;
}

这周实在是太忙了  : (

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值