计算C ++中前一半和后一半相同位的偶数长度二进制序列

我们给了几个比特n作为二进制序列的输入。此处的目标是找到长度为2n的二进制序列,以使其前半部分和后半部分的总和相等。前n位和后n位具有相同的和。

我们有一个二进制序列,因此将数字放在任何位置的唯一选择是0和1。对于前半部分和后半部分的n位,否。可能的组合是-

n位全零(0 1)nC0 = 1

n位和1 1的nC1

n位与2 1的nC2

具有n 1的nCn的n位

对于2n位

  • 上半部分为0 1,下半部分为0 1 nC0 X nC0

  • 上半部分为1 1,下半部分为1 1 nC1 X nC1

  • 前一半为2 1,后一半为2 1 nC2 X nC2

  • ..............

  • 前一半为n 1,后一半为n 1 nCn X nCn

这样的组合总数= nC0 * nC0 + nC1 * nC1 + ....... + nCn * nCn

=(nC0)2+(nC1)2 + .......... +(nCn)2

输入值

n=1

输出结果

Sequences with same sum of first and second half bits: 2

说明-可能的2 * 1 = 2位序列00,01,10,11这四个01和10中的总和为= 1

输入值

n=2

输出结果

Sequences with same sum of first and second half bits: 6

说明-可能的2 * 2 = 4位序列0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111

在这些序列中,前2位和后2位的总和相同-

0000,0101,0110,1001,1010,1111,总计= 6

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

  • 整数“位”存储数字。

  • 函数findSeq(int n)将n作为输入,并返回具有等于或大于前一半和后一半2n位的序列数。

  • 变量nCi用于存储初始值= 1,因为nC0为1。

  • 初始化ans = 0,它将把这样的序列计为nCi * nCi之和。

  • 从i = 0到n开始将nCi * nCi添加到ans,按上述公式计算每个nCi。

  • 在for循环结束后,返回以“ ans”表示的结果作为计数。

示例

#include<iostream>
using namespace std;
//返回偶数长度序列的计数
int findSeq(int n){
   int nCi=1; //nC0=1
   int ans = 1;
   for (int i = 1; i<=n ; i++){
      //nCi =(nCi-1)*(nCi / nCi-1)
      //nCi / nC(i-1)=(n + 1-i)/ i; 
      nCi = (nCi * (n+1-i))/i;
      ans += nCi*nCi;
   }
   return ans;
}
int main(){
   int bits = 2;
   cout << "Count of binary sequences such that sum of first and second half bits is
   same: "<<findSeq(bits);
   return 0;
}

输出结果

Count of binary sequences such that sum of first and second half bits is same: 6