কম্পিউটার

C/C++ এ পরপর 1 ছাড়া বাইনারি স্ট্রিংয়ের সংখ্যা গণনা করার প্রোগ্রাম?


এখানে আমরা একটি আকর্ষণীয় সমস্যা দেখতে পাব। ধরুন n এর একটি মান দেওয়া হল। আমাদের n দৈর্ঘ্যের সমস্ত স্ট্রিং খুঁজে বের করতে হবে, যাতে কোনো ধারাবাহিক 1s নেই। যদি n =2 হয়, তাহলে সংখ্যাগুলি হল {00, 01, 10}, সুতরাং আউটপুট হল 3৷

আমরা ডাইনামিক প্রোগ্রামিং ব্যবহার করে এটি সমাধান করতে পারি। ধরুন আমাদের একটি টেবিল আছে ‘a’ এবং ‘b’। যেখানে arr[i] দৈর্ঘ্য i এর বাইনারি স্ট্রিংগুলির সংখ্যা সংরক্ষণ করছে, যেখানে কোনো ধারাবাহিক 1s উপস্থিত নেই এবং 0 দিয়ে শেষ হচ্ছে। একইভাবে, b একই ধারণ করছে কিন্তু 1 দিয়ে শেষ হওয়া সংখ্যাগুলি। আমরা শেষ যেখানে 0 বা 1 যুক্ত করতে পারি 0, কিন্তু শেষটি 1 হলে শুধুমাত্র 0 যোগ করুন।

আসুন এই ধারণা পেতে অ্যালগরিদম দেখি।

অ্যালগরিদম

noConsecutiveOnes(n) -

Begin
   define array a and b of size n
   a[0] := 1
   b[0] := 1
   for i in range 1 to n, do
      a[i] := a[i-1] + b[i - 1]
      b[i] := a[i - 1]
   done
   return a[n-1] + b[n-1]
End

উদাহরণ

#include <iostream>
using namespace std;
int noConsecutiveOnes(int n) {
   int a[n], b[n];
   a[0] = 1;
   b[0] = 1;
   for (int i = 1; i < n; i++) {
      a[i] = a[i-1] + b[i-1];
      b[i] = a[i-1];
   }
   return a[n-1] + b[n-1];
}
int main() {
   cout << noConsecutiveOnes(4) << endl;
}

আউটপুট

8

  1. ত্রিভুজাকার ম্যাচস্টিক নম্বরের জন্য C/C++ প্রোগ্রাম?

  2. nম কাতালান নম্বরের জন্য C/C++ প্রোগ্রাম?

  3. C++ এ বাইনারি ম্যাট্রিক্সকে শূন্য ম্যাট্রিক্সে রূপান্তর করতে অপারেশনের সংখ্যা গণনা করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম পরপর 1’ ছাড়া বাইনারি স্ট্রিং সংখ্যা গণনা করতে