以二进制形式计算连续的 1
count consecutive 1's in binary
我正在用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个数字,但它为我提供了具有(最大连续-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。您可以通过在循环后添加mmax += 1
来解决此问题。
使用小示例仅一点点跟踪将显示为什么。
首先,可以说您的数组中只有1'1'。
由于您需要当前位置和下一个位置为" 1",因此您将始终获得0.
。假设我有" 11111"。在第一个" 1"中,由于下一个位置也为" 1",您会增加一次。这重复直到第四'1',到目前为止,您总共将计数增加4次。当您到达5th'1'时,您的下一个位置不是'1',因此您的计数停在4。
。通常,您的方法就像在手指之间计算差距,给定5个手指,您会得到4个空白。
旁注:当您的数组中没有1'时,您的代码将失败。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 模板元程序查找相似的连续类型名称
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 通过在带有 C++ 的列表中添加连续元素来计算新的整数列表
- 以二进制形式计算连续的 1
- 计算每个连续的整数在数组中总和
- 如何使用 C 连续输出自计算开始以来的秒数
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 如何在OpenCV中计算连续非零像素之间的零像素
- 动态规划:计算连续跳跃列表的所有可能的结束位置
- 如何编写一个函数来计算字符串中相同的连续字母
- 计算(列表中)连续元素的最大和
- 以低复杂度计算K个连续数字模组1000000007的LCM的程序
- 计算一个向量中不重复的连续元素的最大数目.c++