Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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 होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक मानचित्र मानचित्रण परिभाषित करें

  • मान्य सरणी परिभाषित करें

  • एक फ़ंक्शन हल करें () को परिभाषित करें, इसमें संख्या, घुमाने, अंक, एन,

  • अगर घुमाना संख्या के बराबर नहीं है, तो -

    • (रिटर्न 1 से बढ़ाएं)

  • इनिशियलाइज़ करने के लिए i:=0, जब i <वैलिड साइज़, अपडेट (i को 1 से बढ़ाएँ), −

    करें
    • खुदाई:=मान्य [i]

    • अगर संख्या * 10 + डिग> एन, तो

      • लूप से बाहर आएं

    • हल करें (संख्या * 10 + डिग, एक नक्शा परिभाषित करें, अंक * 10, एन)

  • मुख्य विधि से निम्न कार्य करें -

  • रिट:=0

  • मान्य :={ 0, 1, 6, 8, 9 }

  • मैपिंग [0] :=0

  • मैपिंग[1] :=1

  • मैपिंग[6] :=9

  • मैपिंग[9] :=6

  • मानचित्रण[8] :=8

  • हल(1, 1, 10, एन)

  • हल करें(6, 9, 10, एन)

  • हल करें(9, 6, 10, एन)

  • हल (8, 8, 10, एन)

  • वापसी रिट

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#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++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की

  1. C++ में एडम नंबर

    इस खंड में हम देखेंगे कि एक प्रोग्राम कैसे लिखा जाता है जो यह जांच सकता है कि दी गई संख्या एडम नंबर है या नहीं। कोड में गोता लगाने से पहले आइए देखें कि एडम नंबर क्या है? आदम संख्या एक संख्या है मान लीजिए n, तो यदि n का वर्ग और n के विपरीत का वर्ग एक-दूसरे के विपरीत हों, तो वह संख्या आदम संख्या होती