কম্পিউটার

C++ এ বিভ্রান্তিকর নম্বর II


ধরুন আমাদের একটি ডিজিট আছে, এখন যদি আমরা সেই ডিজিটটিকে 180 ডিগ্রি ঘুরিয়ে নতুন ডিজিট তৈরি করি। 0, 1, 6, 8, 9 কে 180 ডিগ্রি ঘোরানো হলে তারা যথাক্রমে 0, 1, 9, 8, 6 হয়। কিন্তু যখন 2, 3, 4, 5 এবং 7 কে 180 ডিগ্রি ঘোরানো হয়, তখন তারা অবৈধ হয়ে যায়।

একটি বিভ্রান্তিকর সংখ্যা এমন একটি সংখ্যা যা 180 ডিগ্রি ঘোরালে একটি নতুন সংখ্যা হয়ে যায়। সুতরাং, যদি আমাদের একটি ধনাত্মক পূর্ণসংখ্যা N থাকে, তাহলে আমাদের 1 এবং N এর মধ্যে বিভ্রান্তিকর সংখ্যার সংখ্যা খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুট 20 এর মত হয়, তাহলে আউটপুট হবে 6

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

  • একটি মানচিত্র ম্যাপিং সংজ্ঞায়িত করুন

  • একটি অ্যারে বৈধ সংজ্ঞায়িত করুন

  • একটি ফাংশন সল্ভ() সংজ্ঞায়িত করুন, এটি num, rotate, digit, N,

    নেবে
  • যদি ঘোরানো সংখ্যার সমান না হয়, তাহলে −

    • (রেট 1 দ্বারা বৃদ্ধি করুন)

  • আরম্ভ করার জন্য i :=0, যখন i <বৈধের আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −

    • dig :=বৈধ[i]

    • যদি num * 10 + dig> N হয়, তাহলে

      • লুপ থেকে বেরিয়ে আসুন

    • সমাধান (সংখ্যা * 10 + ডিগ, একটি মানচিত্র সংজ্ঞায়িত করুন, অঙ্ক * 10, N)

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • ret :=0

  • বৈধ :={ 0, 1, 6, 8, 9 }

  • ম্যাপিং[0] :=0

  • ম্যাপিং[1] :=1

  • ম্যাপিং[6] :=9

  • ম্যাপিং[9] :=6

  • ম্যাপিং[8] :=8

  • সমাধান (1, 1, 10, N)

  • সমাধান (6, 9, 10, N)

  • সমাধান (9, 6, 10, N)

  • সমাধান (8, 8, 10, N)

  • রিটার্ন রিটার্ন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   int ret;
   map <int, int> mapping;
   vector <int> valid;
   void solve(lli num, lli rotate, lli digit, lli N){
      if (rotate != num) {
         ret++;
      }
      for (int i = 0; i < valid.size(); i++) {
         int dig = valid[i];
         if (num * 10 + dig > N) {
            break;
         }
         solve(num * 10 + dig, mapping[dig] * digit + rotate, digit * 10, N);
      }
   }
   int confusingNumberII(int N) {
      ret = 0;
      valid = { 0, 1, 6, 8, 9 };
      mapping[0] = 0;
      mapping[1] = 1;
      mapping[6] = 9;
      mapping[9] = 6;
      mapping[8] = 8;
      solve(1, 1, 10, N);
      solve(6, 9, 10, N);
      solve(9, 6, 10, N);
      solve(8, 8, 10, N);
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.confusingNumberII(20));
}

ইনপুট

20

আউটপুট

6

  1. C++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. C++ এ ছিটমহলের সংখ্যা

  4. C++ এ অ্যাডাম নম্বর