কম্পিউটার

C++ এ একটি প্রদত্ত বার্তা ডিকোড করার জন্য প্রোগ্রাম


ধরুন আমাদেরকে একটি এনকোড করা বার্তা দেওয়া হয়েছে যা পূর্ণসংখ্যার একটি স্ট্রিং। এখন, এই পূর্ণসংখ্যাগুলিকে বর্ণমালার একটি নির্দিষ্ট অক্ষরে ম্যাপ করা যেতে পারে। a 1 তে ম্যাপ করা হয়েছে, b 2 তে ম্যাপ করা হয়েছে, c 3 তে ম্যাপ করা হয়েছে ইত্যাদি। এছাড়াও একটি '*' অক্ষর রয়েছে যা বার্তাটিতে থাকতে পারে এবং এটি 1 থেকে 9 পর্যন্ত যে কোনও সংখ্যায় ম্যাপ করা যেতে পারে। তাই একটি বার্তা 'ইনপুট' দেওয়া হলে, এটিকে কতগুলি উপায়ে ডিকোড করা যায় তা আমাদের খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি input ="18" এর মত হয়, তাহলে আউটপুট হবে 2।

বার্তাটিকে "ah" তে ডিকোড করা যেতে পারে, যেমন 1 মানচিত্র "a" থেকে এবং 8 মানচিত্র "h" তে। এছাড়াও, সংখ্যাটি "r" তে ম্যাপ করতে পারে, যেমন 18টি মানচিত্র "r" এ। তাই। মোট 2টি উপায়ে ইনপুট ডিকোড করা যায়৷

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • n :=ইনপুটের দৈর্ঘ্য
  • আকারের একটি অ্যারে dynArr সংজ্ঞায়িত করুন:n+1 এবং এটিকে শূন্য দিয়ে শুরু করুন
  • p :=1
  • k :='0'
  • dynArr[0] :=1
  • আরম্ভ করার জন্য i :=1, যখন i <=n, আপডেট করুন (i 1 দ্বারা বৃদ্ধি করুন), −
      করুন
    • c :=ইনপুট[i - 1]
    • যদি c 0 এর মতো হয় এবং না হয় (k '1' এর সমান বা k '2' এর মতো বা k '*' এর মতো), তাহলে −
      • p :=0
      • লুপ থেকে বেরিয়ে আসুন
    • যদি ইনপুট[i - 1] '*' এর মত হয়, তাহলে −
      • dynArr[i] :=(dynArr[i - 1] * 9) mod m
      • যদি k '1' এর মত হয় বা k '*' এর মত হয়, তাহলে −
        • dynArr[i] :=(dynArr[i] + dynArr[i - 2] * 9) mod m
      • যদি k '2' এর মত হয় বা k '*' এর মত হয়, তাহলে −
        • dynArr[i] :=(dynArr[i] + (dynArr[i - 2] * 6) mod m) mod m
    • অন্যথায়,
      • যদি c '0' এর সমান না হয়, তাহলে −

        • যদি k '1' এর মত হয় বা k '*' এর মত হয়, তাহলে −
          • dynArr[i] :=(dynArr[i] + dynArr[i - 2]) mod m
        • যদি (k '2' এর মতো বা k '*' এর মতো) এবং ইনপুট[i - 1] <='6', তাহলে −
          • dynArr[i] :=(dynArr[i] + (dynArr[i - 2]) mod m) mod m
    • k :=c
  • যদি p অ-শূন্য হয়, তাহলে dynArr[n] ফেরত দিন, অন্যথায় 0 দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include<bits/stdc++.h>

using namespace std;

const long m = 1e9 + 7;

int solve(string input) {
   int n = input.length();
   long long dynArr[n + 1] = {0};

   bool p = 1;
   char k = '0';

   dynArr[0] = 1;
   for (int i = 1; i <= n; i++) {
      char c = input[i - 1];
      if (c == 0 && !(k == '1' || k == '2' || k == '*')) {
         p = 0;
         break;
      }
      if (input[i - 1] == '*') {
         dynArr[i] = (dynArr[i - 1] * 9) % m;
         if (k == '1' || k == '*') dynArr[i] = (dynArr[i] + dynArr[i - 2] * 9) % m;
         if (k == '2' || k == '*') dynArr[i] = (dynArr[i] + (dynArr[i - 2] * 6) % m) % m;
      } else {
         if (c != '0') dynArr[i] = dynArr[i - 1];
         if (k == '1' || k == '*') dynArr[i] = (dynArr[i] + dynArr[i - 2]) % m;
         if ((k == '2' || k == '*') && input[i - 1] <= '6') dynArr[i] = (dynArr[i] + (dynArr[i - 2]) % m) % m;
      }
      k = c;
   }
   return p ? dynArr[n] : 0;
}

int main() {
   cout<< solve("18") <<endl;
   return 0;
}

ইনপুট

18

আউটপুট

2

  1. একটি প্রদত্ত ভেক্টর থেকে আইটেম মুছে ফেলার জন্য C++ প্রোগ্রাম

  2. একটি প্রদত্ত সংখ্যার ক্ষুদ্রতম সংখ্যা খুঁজে বের করার জন্য C++ প্রোগ্রাম

  3. C++ প্রোগ্রামে একটি প্রদত্ত অ্যারে থেকে লিঙ্কযুক্ত তালিকা তৈরি করুন

  4. C++ এ একটি প্রদত্ত বাইনারি গাছ ছাঁটাই করার প্রোগ্রাম