蒟蒻求助

P1320 压缩技术(续集版)

cheeeeeeese @ 2024-08-30 12:42:55

#include<bits/stdc++.h>
using namespace std;
int main(){
    int o[201]={0},s=1,p=0,u=0,c;
    string a;
    char l;
    bool b=0;
    while(cin>>a){
        for(int i=0;i<a.size();i++){
            c=a.size();
            if(b==0){
                l=a[0];
                b=1;
                continue;
            }
            if(a[i]==l)
            s++;
            else{
                o[p]=s;
                s=1;
                p++;
                l=a[i];
            }
        }
        if(u==c)
        break;
        u++;
    }
    cout<<c<<" ";
    for(int i=0;i<201;i++){
        if(o[i]==0)
        break;
        cout<<o[i]<<" ";
    }
    return 0;
}

by Leopard_cats @ 2024-08-30 13:08:11

@cheeeeeeese

先讲思路问题:

1、你题目理解有误,“第一个数表示连续有几个 0,第二个数表示接下来连续有几个 1,第三个数再接下来连续有几个 0,第四个数接着连续几个 1,以此类推……”这句话意思是先统计 0 再统计 1 这样交替的,不是以第一个字符为基准的,所以只用把 l 开始时候赋值成‘0’就可以了,这是最重要的。

2、你这个代码while跑完之后最后的一串连续字符是没有记进去的(相当于样例都过不了),你可以去看看。

再讲一些代码里面的我改的细节:

1、“ if(u==c) ” 以及底下几句能看出你想统计行数,但上面你已经写了“ while(cin>>a) ”了,所以不需要(实测下来发现也没用,还是要我自己结束输入)

2、输出的for只用跑 0 到 p 就可以了


by Leopard_cats @ 2024-08-30 13:08:47

#include<bits/stdc++.h>
using namespace std;
int main(){
    int o[201]={0},s=0,p=0,u=0,c;
    string a;
    char l='0';
    bool b=0;
    while(cin>>a){
        c=a.size();
        for(int i=0;i<a.size();i++){
            if(a[i]==l) s++;
            else{
                o[p]=s;
                s=1;
                p++;
                l=a[i];
            }
        }
    }
    cout<<c<<" ";
    o[p]=s;
    for(int i=0;i<=p;i++){
        cout<<o[i]<<" ";
    }
    return 0;
}

by cheeeeeeese @ 2024-08-31 14:10:29

谢谢大佬!


by zhuang120608 @ 2024-09-12 19:40:27

给我干哪来了


by cheeeeeeese @ 2024-09-29 19:55:25

不是,庄学诚你从哪冒出来的


|