c++ - 计算二进制中连续的 1

标签 c++

我正在用 Hackerrank 编写代码。最近的问题是,将十进制转换为基数 2,然后计算二进制数中最大的连续 1。首先我提出以下解决方案。它工作正常。但是我不明白它的计数部分,即使我写了它。

代码是

int main(){
    int n,ind=0, count=0, mmax=0;
    char bin[100];
    cin >> n;
    while(n){
        if(n%2==0) {
            bin[ind]='0';
            n = n / 2;
            ind = ind + 1; 
            }
        else if(n%2==1) {
            bin[ind]='1';
            n = n / 2;
            ind = ind + 1;    
        }
    }
    for(int i=0; i<=(ind-1); i++){
        if(bin[i] == '1' && bin[i+1] == '1'){
            count++; 
            if(mmax < count)
                mmax = count;
        }
        else
            count=0;
    }
    cout << mmax + 1 << endl;
    return 0;
    }

在上面的代码中,我猜变量 mmax 会给我 1 的最大连续数,但它给我的值是 (max consecutive - 1),所以我只是这样写并提交了代码。但是我很好奇。为什么它以这种方式工作。我对代码的工作方式有点困惑。

谢谢

最佳答案

假设您有这个二进制序列:

11110

您的代码将从第一个和第二个开始进行比较:

|11|110 1 && 1 -> max = 1
1|11|10 1 && 1 -> max = 2
11|11|0 1 && 1 -> max = 3
111|10| 1 && 0 -> max = 3

您可以看到,虽然有 4 个 1,但您只进行了 3 次比较,因此您的最大值始终是实际最大值的 -1。您可以通过在 for 循环之后添加 mmax += 1 来解决此问题。

关于c++ - 计算二进制中连续的 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47522344/

相关文章:

c++ - 使用 clang-format 保留用作函数中间参数的短 lambda

C++ 与部分模板特化语法混淆

c++ - 传递函数指针——语义

python - PyBind11:使用指向字符串的指针的构造函数

c++ - 为什么不能在返回语句中使用 "<<"运算符?

java - 查找数组的中值?

c++ - 如何消除对幂等函数的额外调用?

c++ - std::bind 与类型别名

c++ - 无法在另一个类中实例化模板化类

c++ - ostream_iterator 到字符串而不是 cout?