Chúng tôi được cung cấp một số bit n làm đầu vào cho một chuỗi nhị phân. Mục tiêu ở đây là tìm chuỗi nhị phân có độ dài 2n sao cho tổng các bit đầu tiên và nửa thứ hai của nó bằng nhau. N bit đầu tiên và n bit tiếp theo có tổng bằng nhau.
Chúng ta có một chuỗi nhị phân nên sự lựa chọn duy nhất để đặt các chữ số ở bất kỳ vị trí nào là 0 và 1. Đối với n bit ở nửa đầu và nửa sau, không. trong số các kết hợp có thể có là -
n bit với tất cả các số không (0 1’s) nC0 =1
n bit với 1 1 là nC1
n bit với 2 1 là nC2
.
.
n bit với n 1 là nCn
Đối với 2n bit
-
Hiệp một với 0 1’s và nửa sau với 0 1’s nC0 X nC0
-
Nửa đầu với 1 1 và nửa sau với 1 1 là nC1 X nC1
-
Nửa đầu với 2 1’s và nửa sau với 2 1’s nC2 X nC2
-
..............
-
Nửa đầu với n 1 và nửa sau với n 1 là nCn X nCn
Tổng các kết hợp như vậy =nC0 * nC0 + nC1 * nC1 + ....... + nCn * nCn
=(nC0) 2+ (nC1) 2 + ........... + (nCn) 2
Đầu vào
n=1
Đầu ra
Sequences with same sum of first and second half bits: 2
Giải thích - Có thể có 2 * 1 =2 dãy bit 00,01,10,11 Trong bốn số 01 và 10 này có tổng =1
Đầu vào
n=2
Đầu ra
Sequences with same sum of first and second half bits: 6
Giải thích - Có thể có 2 * 2 =chuỗi 4 bit 0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111
Trong số các chuỗi này có tổng của 2 bit đầu tiên và 2 bit cuối cùng là như nhau -
0000,0101,0110,1001,1010,1111, tổng =6
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Số nguyên ‘bit’ lưu trữ số.
-
Hàm findSeq (int n) nhận n làm đầu vào và trả về số lượng các chuỗi có tổng trên 2n bit đầu tiên và nửa thứ hai bằng nhau.
-
Biến nCi được sử dụng để lưu trữ giá trị ban đầu =1 vì nC0 là 1.
-
Khởi tạo ans =0, sẽ đếm các chuỗi như tổng của nCi * nCi.
-
Bắt đầu từ i =0 đến n, thêm nCi * nCi vào ans, tính từng nCi như công thức trên.
-
Sau khi kết thúc vòng lặp for, trả về kết quả ở dạng "ans" dưới dạng số đếm.
Ví dụ
#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; }
Đầu ra
Count of binary sequences such that sum of first and second half bits is same: 6