Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับลำดับไบนารีที่มีความยาวเท่ากันโดยมีผลรวมของบิตครึ่งแรกและครึ่งหลังเท่ากันใน C++


เราได้รับหลายบิต n เป็นอินพุตสำหรับลำดับไบนารี เป้าหมายที่นี่คือการค้นหาลำดับเลขฐานสองของความยาว 2n โดยที่ผลรวมของบิตครึ่งแรกและครึ่งหลังมีค่าเท่ากัน n บิตแรกและ n บิตถัดไปมีผลรวมเท่ากัน

เรามีลำดับเลขฐานสอง ดังนั้นทางเลือกเดียวที่จะใส่ตัวเลขในที่ใดก็ได้คือ 0 และ 1 สำหรับ n บิตในครึ่งแรกและครึ่งหลัง ไม่มี ของชุดค่าผสมที่เป็นไปได้คือ −

n บิตที่มีศูนย์ทั้งหมด (0 1's) nC0=1

n บิตกับ 1 1 ของ nC1

n บิตกับ 2 1 ของ nC2

.

.

n บิตกับ nCn ของ n 1

สำหรับ 2n บิต

  • ครึ่งแรกกับ 0 1 และครึ่งหลังกับ 0 1 ของ nC0 X nC0

  • ครึ่งแรกกับ 1 1 และครึ่งหลังกับ 1 1 ของ nC1 X nC1

  • ครึ่งแรกกับ 2 1 และครึ่งหลังกับ 2 1 ของ nC2 X nC2

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

  • ครึ่งแรกกับ 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 บิต 0000001,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 loop ให้คืนค่าผลลัพธ์ที่แสดงเป็น 'ans' เป็นการนับ

ตัวอย่าง

#include<iostream>
using namespace std;
// Returns the count of even length sequences
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