C++ 中计算连续零对的数量


我们有一个从 1 开始的序列生成器。在每一步中,0 变成 10,1 变成 01。因此,在连续的步骤中将发生以下变化:

步骤 1 − 01

步骤 2 − 1001

步骤 3 − 01101001 ……

目标是找到给定步数的连续 0 对的数量。

如果输入步数为 1,则 0 对的数量为 0;如果输入步数为 2,则 0 对的数量为 1;如果输入步数为 3,则 0 对的数量为 1。

步骤 4 − 1001011001101001

步骤 5 − 01101001100101101001011001101001

我们可以观察到,序列以 2 的幂递增,并且在长度为 12 之后重复自身,并且每 12 个字符重复一次。因此,这些长度为 12 的序列有 2 对连续的 0。

对于步骤 S,长度为 12 的模式的数量为 2S /12

连续 2 模式数量 = 1(初始)+ 2 X S(对于其余长度为 12 的重复)

让我们通过例子来理解。

输入 − 步数 = 5

输出 − 连续零对的数量为 − 5

解释 − 如上所示,第 5 步的序列为 −

Step 5: 01101001100101101001011001101001
Number of pairs of 0’s is 5.
Also with formula : tmp=25
/12= 32/12 = 2, pairs=1+ 2 x 2 = 5

输入 − 步数 = 10

输出 − 连续零对的数量为 − 171

解释 − 使用公式 − tmp=210/12= 1024/12 = 85,pairs=1+ 2 x 85 = 171

下面程序中使用的方法如下

我们将步数作为输入,并检查步数是否等于 1,如果是,则连续 0 对的数量为 0。如果步数等于 2 或 3,则此类对的数量为 1。

否则,使用公式 tmp=2input/12 和 pairs=1+2*tmp 计算。

  • 将一个变量 decimal 作为步数的输入。

  • 函数 Zero_pairs(int decimal) 获取 decimal 并返回该步的连续零对的数量。

  • 将初始计数设置为 0。

  • 如果 decimal<=1,则返回 0。

  • 如果 decimal==2 或 decimal==3。则返回 1。

  • 否则,计算 temp=(pow(2,decimal))/12 并计算 count 为 2*temp + 1。

  • 返回 count 作为结果。

示例

 在线演示

#include<bits/stdc++.h>
using namespace std;
int Zero_pairs(int decimal){
   int count = 0;
   if(decimal <=1){
      count = 0;
   }
   else if(decimal == 2 || decimal == 3){
      count = 1;
   }
   else{
      int temp = (pow(2, decimal) / 12);
      count = 2 * temp + 1;
   }
   return count;
}
int main(){
   int decimal = 7;
   cout<<"Count of Pairs Of Consecutive Zeros are: "<<Zero_pairs(decimal);
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出:

Count of Pairs Of Consecutive Zeros are: 21

更新于: 2020年12月2日

239 次查看

开启你的 职业生涯

完成课程获得认证

开始学习
广告

© . All rights reserved.