在 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 XS(其余 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 计算。

  • 将变量十进制作为步骤的输入。

  • 函数Zero_pairs(int decimal)采用十进制并返回该步骤的连续零对数。

  • 取初始计数为 0。

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

  • 如果小数==2或小数==3。然后返回 1。

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

  • 返回计数作为结果。

示例

#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<<"对连续零的计数是: "<<Zero_pairs(decimal);
   return 0;
}
输出结果

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

对连续零的计数是: 21

猜你喜欢