我们有一个从 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