题目描述
计算机数据都是由0和1组成的,看着长长的0101001110101111011,要找出连续n个的1有多少个,确实麻烦,问题来了,你有简单方法找出所有的连续n个的1的个数。很简单吧,那就来吧,亲。
输入要求
一个字符串,由0和1组成,每个测试数据一行,长度小于1000。
输出要求
升序输出所有的连续n个的1的个数m,每行一个n,然后是个数m。
输入样例
0101001110101111011
输出样例
1 12 2 6 3 3 4 1
思路:遍历字符串,寻找最多连续1的字符子串中1的个数,寻找连续1的子串
#include<stdio.h>
#include<string.h>
int lxy(char a[],int n,int lx){ //寻找连续1的函数
int i,j,flag,k=0;
for(i=0;i<n;i++){
if(a[i]=='1'){
flag=1;
for(j=i+1;j<i+lx;j++){
if(a[j]!='1'){
flag=0;
}
}
if(flag==1){
k++;
}
}
}
return k;
}
int zdy(char a[],int n){ //寻找最多连续1的字符子串中1的个数
int i,j,max=0,k=0;
for(i=0;i<n;i++){
if(a[i]=='1'){
while(a[i]=='1'){
k++;
i++;
}
if(k>max){
max=k;
}
}k=0;
}
return max;
}
int main(){
char a[1001];
int i,j,k=0,n,max;
gets(a);
n=strlen(a);
max=zdy(a,n);
for(i=1;i<=max;i++){
printf("%d ",i);
k=lxy(a,n,i);
printf("%d\n",k);
k=0;
}
return 0;
}