首页 > 试题广场 >

求最大连续bit数

[编程题]求最大连续bit数
  • 热度指数:137524 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

数据范围:数据组数:
进阶:时间复杂度:,空间复杂度:

输入描述:

输入一个int类型数字



输出描述:

输出转成二进制之后连续1的个数

示例1

输入

200

输出

2

说明

200的二进制表示是11001000,最多有2个连续的1。  
#include <stdio.h>

int main() {
    unsigned int a,count = 0,temp = 0;
    scanf("%d",&a);
    if(a > 500000)return -1;
    for(int i = 0; i < 20; i++){
        if((a & 1) != 0){
            temp++;  
        }else{
            if(temp > count){
                count = temp;
            }
            temp = 0;
        }
        a = a >> 1;
    }
    printf("%d",count);
    return 0;
}
发表于 2024-03-22 17:11:42 回复(0)
#include <stdio.h>
int main() {
    int n, sum = 0, min = 0;
    scanf("%d",&n);
    while(n>0){
        if((n&1)==1) min = min>++sum?min:sum;
        else sum = 0;
        n = n>>1;
    }
    printf("%d",min);
    return 0;
}

发表于 2023-12-03 23:06:24 回复(0)
#include <stdio.h>

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int flag = 0;
        int ret = 0;
        int tmp = 0;
        for(int i = 0;i<31;i++)
        {
            if(n&1 == 1)
            {
                if(flag == 0)
                {
                    flag = 1;
                }
                tmp++;
                n >>= 1;
            }
            else
            {
                ret = ret>tmp?ret:tmp;
                tmp = 0;
                flag = 0;
                n >>= 1;
            }
        }
        printf("%d\n",ret);
    }
    return 0;
}
发表于 2023-10-13 22:42:55 回复(0)
#include <stdio.h>
#include <string.h>

int main(){
    int n,len,i;
    int k=0;
    int a[20],b[20];
    scanf("%d",&n);
    while(n/2)
    {
        a[len++]=n%2;n=n/2;
    }
    a[len++]=n%2;
    for(i=0;i<len;i++)
    {
        while(a[i]==1)
        {
            k++;
            i++;    
        }
        b[k-1]=k;
        k=0;
    }
    for(i=0;i<len;i++)
    {
        if(b[i]!=i+1)
        {
            b[i]=0;
        }
    }
    for(i=0;i<len;i++)
    {
        if(b[0]<b[i])
        {
            k=b[0];
            b[0]=b[i];
            b[i]=k;
        }
    }
    printf("%d",b[0]);
    return 0;
}
我这个程序在自己的编译器里输入14,输出3是正确的,但是到了提交时候说实际输出4,不知道为什么
发表于 2023-03-18 22:28:47 回复(0)
#include <stdio.h>

int main() {
    int t,n;
    //scanf("%d",&t);
    //while(t--){
        int count=0;
        int tmp=0;
        scanf("%d",&n);
        while(n){
            if(n&0x01){
                tmp++;
            }
            else{
                tmp=0;
            }
            if(tmp>count) count=tmp;
            n=n>>1;
        }
        printf("%d\n",count);
    //}
    return 0;
}

所以题目给的数据组数是什么意思呢?本来还以为需要格式控制,结果发现没有格式控制。
发表于 2023-01-01 16:00:11 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int n,max,tmp;
    while(scanf("%d",&n)!=EOF)
    {
        tmp = 0;
        max = 0;
        while(n>0)
        {
            if(n&0x01 == 0x01)
            {
                tmp++;
            }
            else
            {
                tmp = 0;
            }
            n >>=1;
            max = (max > tmp)?max:tmp;
        }
        printf("%d\n",max);
    }
    return 0;
}

发表于 2022-06-19 08:59:34 回复(0)
#include <stdio.h>
int main()
{
    int arr[5],num,cnt,i,j=0;
    while(scanf("%d",&num)!=EOF)
    {
        cnt=0;i=0;
        while(num>0)
        {
            if(num&0x01)
                i++;
            else
            {
                if(cnt<i)
                    cnt=i;
                i=0;
            }
            num>>=1;
        }
        if(i>cnt)
            cnt=i;
        arr[j++]=cnt;
    }
    for(i=0;i<j;i++)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}

发表于 2022-04-25 09:31:20 回复(0)
2进制转换,除2取余,逆序排列。
#include<stdio.h>
int main(){
    int n;
    while(~scanf("%d",&n)){
        int max=1;  //假设当前最大连续为1
        for(int seq=0;n>0;n/=2){
            if(n%2!=0){
                seq++;  //连续进行累加
                if(seq>max) max=seq;  //如果超过就修改当前最大连续数
            }
            else seq=0;  //断连就重置计数
        }printf("%d\n",max);
    }
}


发表于 2022-03-31 02:15:26 回复(0)
求助预测输出中2和1啥意思
发表于 2022-03-13 00:52:25 回复(0)
#include<stdio.h>
int main()
{
    int in;
    while(scanf("%d", &in) != EOF)
    {
        int count = 0;
        int max = 0;
        while(in != 0)
        {
            if(in & 1 == 1)
                count ++;
            else
                count = 0;
            max = (max > count) ? max : count;
            in = in >> 1;
        }
        printf("%d\n", max);
    }
    return 0;
}


发表于 2021-12-12 21:40:25 回复(0)
#include <stdio.h>

int main()
{
    int input;
    int num,max;
    while(scanf("%d",&input)!=EOF)
    {
        num=0;
        max=0;
        while(input)
        {
            if(input%2==1)
                num++;
            else
                num=0;
            max=max>num?max:num;
            input=input/2;
        }
        printf("%d\n",max);
    }
    return 0;
}
循环除2,%2余1则计数+1,%2余0则计数归零,最后保存计数最大值。

发表于 2021-12-10 21:53:52 回复(0)
#include <stdio.h>

int main()
{
    int num = 0;
    while(scanf("%d",&num) != EOF)
    {
        int width = 0 ,Ret = 0;
        int tmp = 0;
        while(num)
        {
            tmp = num%2;
            if(1 == tmp) width++;
            else
            {
                if(width > Ret) Ret = width;
                width = 0;
            }
            num = num/2;
        }
        if(width > Ret) Ret = width;
        printf("%d\n",Ret);
    }
    return 0;
}

发表于 2021-09-03 15:42:44 回复(0)

define _CRT_SECURE_NO_WARNINGS

include <stdio.h>

int main()
{
int num;
int flag;
int max;
int temp[16] = { 0 };
while (scanf("%d", &num) != EOF)
{
flag = 0;
max = 0;
if ((num >= 0) && (num <= 255))
{
max = 0;
int dp[16] = { 0 };
for (int i = 0; i<16; i++)
{
if((num >> i) & 0x01)
{
max = max + 1;
dp[max] = max;
}
else
{
max = 0;
}
}
//查找连续的1
for (int i = 15; i >= 0; i--)
{
if (dp[i] == i)
{
printf("%d\n", dp[i]);
break;
}
}
}
}

return 0;

}

发表于 2021-08-31 15:51:48 回复(0)
使用位运算,向右减少,低位为1则表示除2余1
#include<stdio.h>
int main(){
    int in;
    while(scanf("%d",&in)!=EOF){
        int count=0;
        int max=0;
        do{
            if(in%2==1){
                count++;
                max=max>count?max:count;
            }else{
                count=0;
            }
        }while((in=in>>1)>0);
        printf("%d\n",max);
    }
}
发表于 2021-08-06 19:30:29 回复(0)

问题信息

难度:
14条回答 28228浏览

热门推荐

通过挑战的用户

查看代码