C++ 连续计数1';二进制的s
我正在用Hackerrank写代码。最近的问题是,将十进制数转换为基数2,然后计算二进制数中的最大连续1。首先,我给出以下解决方案。它很好用。但我不明白它的计数部分,即使是我写的 代码是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';
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,它成功了。毕竟,我成了一个不懂它的人。是的,当然只有上帝知道。很好的解释,谢谢解释,谢谢