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
不是,庄学诚你从哪冒出来的