ในปัญหานี้ เราต้องหาเลขฐานสองที่ไม่มีเลข 1 เรียงกัน ในสตริงไบนารี 3 บิต มีเลขฐานสองสามตัวคือ 011, 110, 111 ที่มีเลข 1 ติดต่อกัน และมีตัวเลขห้าตัวที่ไม่มีเลข 1 ที่ต่อเนื่องกัน ดังนั้นหลังจากใช้อัลกอริธึมนี้กับตัวเลข 3 บิตแล้ว คำตอบจะเป็น 5
ถ้า a[i] เป็นเซตของเลขฐานสองซึ่งมีจำนวนบิตเป็น I และไม่มี 1s ติดต่อกัน และ b[i] คือเซตของเลขฐานสอง โดยที่จำนวนบิตคือ I และมีค่า 1s ที่ต่อเนื่องกัน แล้วมีความสัมพันธ์เกิดขึ้นอีกเช่น:
a[i] := a[i - 1] + b[i - 1] b[i] := a[i - 1]
อินพุตและเอาต์พุต
Input: This algorithm takes number of bits for a binary number. Let the input is 4. Output: It returns the number of binary strings which have no consecutive 1’s. Here the result is: 8. (There are 8 binary strings which has no consecutive 1’s)
อัลกอริทึม
countBinNums(n)
ป้อนข้อมูล: n คือจำนวนบิต
ผลลัพธ์ − นับจำนวนตัวเลขที่ไม่มี 1 ตัวต่อกัน
Begin define lists with strings ending with 0 and ending with 1 endWithZero[0] := 1 endWithOne[0] := 1 for i := 1 to n-1, do endWithZero[i] := endWithZero[i-1] + endWithOne[i-1] endWithOne[i] := endWithZero[i-1] done return endWithZero[n-1] + endWithOne[n-1] End
ตัวอย่าง
#include <iostream> using namespace std; int countBinNums(int n) { int endWithZero[n], endWithOne[n]; endWithZero[0] = endWithOne[0] = 1; for (int i = 1; i < n; i++) { endWithZero[i] = endWithZero[i-1] + endWithOne[i-1]; endWithOne[i] = endWithZero[i-1]; } return endWithZero[n-1] + endWithOne[n-1]; } int main() { int n; cout << "Enter number of bits: "; cin >> n; cout << "Number of binary numbers without consecitive 1's: "<<countBinNums(n) << endl; return 0; }
ผลลัพธ์
Enter number of bits: 4 Number of binary numbers without consecitive 1's: 8