在 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(初始)+2XS(其余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+2x85=171
下面程序中使用的方法如下
我们将把步数作为输入并检查步数是否为1,则连续0的对数为0。如果步数=2或3,则此类对的数量为1。
否则,使用公式tmp=2input/12和pairs=1+2*tmp计算。
将变量十进制作为步骤的输入。
函数Zero_pairs(intdecimal)采用十进制并返回该步骤的连续零对数。
取初始计数为0。
如果小数<=1,则返回0。
如果小数==2或小数==3。然后返回1。
否则计算temp=(pow(2,decimal))/12并将计数计算为2*temp+1。
返回计数作为结果。
示例
#includeusing 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<<"对连续零的计数是: "< 输出结果 如果我们运行上面的代码,它将生成以下输出-
对连续零的计数是: 21