Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 连续计数1';二进制的s_C++ - Fatal编程技术网

C++ 连续计数1';二进制的s

C++ 连续计数1';二进制的s,c++,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';

我正在用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;
    }
intmain(){
int n,ind=0,count=0,mmax=0;
char-bin[100];
cin>>n;
while(n){
如果(n%2==0){
bin[ind]=“0”;
n=n/2;
ind=ind+1;
}
否则如果(n%2==1){
bin[ind]=“1”;
n=n/2;
ind=ind+1;
}
}

对于(int i=0;i让我们假设你有这个二进制序列:

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
来解决此问题。

假设您有以下二进制序列:

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
来解决此问题。

仅使用小示例进行一点跟踪即可说明原因

首先,假设数组中只有1个“1”

由于您要求当前位置和下一个位置都为“1”,因此在这种情况下,您将始终得到0

假设我有“11111”。在第一个“1”处,因为下一个位置也是“1”,所以你增加计数一次。这一直重复到第四个“1”,到目前为止,你总共增加了4次计数。当你达到第五个“1”时,你的下一个位置不是“1”,因此你的计数在4处停止

通常,您的方法就像计算手指之间的间隙,给定5个手指,您将得到4个间隙


旁注:当数组中没有“1”时,您的代码将失败。

只需使用一个小示例进行一点跟踪即可说明原因

首先,假设数组中只有1个“1”

由于您要求当前位置和下一个位置都为“1”,因此在这种情况下,您将始终得到0

假设我有“11111”。在第一个“1”处,因为下一个位置也是“1”,所以你增加计数一次。这一直重复到第四个“1”,到目前为止,你总共增加了4次计数。当你达到第五个“1”时,你的下一个位置不是“1”,因此你的计数在4处停止

通常,您的方法就像计算手指之间的间隙,给定5个手指,您将得到4个间隙


旁注:如果你的数组中没有“1”,你的代码将失败。

但我不理解它的计数部分,即使是我写的。
…你写它时是在发呆还是什么?@FantasticMrFox
//当我写这篇文章时,只有上帝和我知道我在做什么//现在,上帝才知道。
@FantasticMrFox我相信变量mmax会给我我想要的结果。但是,当我编译它时,它给我的结果不到正确结果的1。所以我在mmax中添加了1,它起了作用。毕竟我变成了一个不懂它的人。是的,当然只有上帝知道它
,但我甚至不懂它的计数部分虽然是我写的。
…你写它的时候是在恍惚还是什么?@FantasticMrFox
//当我写这篇文章时,只有上帝和我明白我在做什么//现在,上帝才知道。
@FantasticMrFox我相信变量mmax会给我我想要的结果。但当我编译它时,它给我的结果不到正确的结果。所以我在mmax中添加了1,它成功了。毕竟,我成了一个不懂它的人。是的,当然只有上帝知道。很好的解释,谢谢解释,谢谢