Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में लगातार वाले के बिना गैर-नकारात्मक पूर्णांक

मान लीजिए कि हमारे पास एक धनात्मक पूर्णांक n है। हमें n से कम या उसके बराबर गैर-ऋणात्मक पूर्णांक ज्ञात करने हैं। बाधा यह है कि द्विआधारी प्रतिनिधित्व में लगातार वाले नहीं होंगे। तो अगर इनपुट 7 है, तो उत्तर 5 होगा, क्योंकि 5 का बाइनरी प्रतिनिधित्व 101 है।

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

  • एक फ़ंक्शन कन्वर्ट को परिभाषित करें (), इसमें n लगेगा,
  • रिट:=खाली स्ट्रिंग
  • जबकि n गैर-शून्य है, करें −
    • ret :=ret + (n mod 2)
    • n :=दायां शिफ्ट n, 1 बार
  • रिटर्न रिटर्न
  • मुख्य विधि से, निम्न कार्य करें -
  • बिट्स:=फंक्शन कन्वर्ट को कॉल करें (संख्या)
  • n :=बिट्स का आकार
  • आकार n के सरणी को परिभाषित करें, n आकार के सरणी शून्य को परिभाषित करें
  • वाले[0] :=1, शून्य[0] :=1
  • इनिशियलाइज़ i :=1 के लिए, जब i करें
  • शून्य[i] :=शून्य[i - 1] + वाले[i - 1]
  • वाले[i] :=शून्य[i - 1]
  • ret :=ones[n - 1] + Zeroes[n - 1]
  • इनिशियलाइज़ करने के लिए i :=n - 2, जब i>=0, अपडेट करें (i से 1 घटाएं), −
      करें
    • यदि बिट्स [i] '0' के समान है और बिट्स [i + 1] '0' के समान है, तो −
      • ret :=ret - ones[i]
    • अन्यथा जब बिट्स [i] '1' के समान हो और बिट्स [i + 1] '1' के समान हो, तो −
      • लूप से बाहर आएं
  • रिटर्न रिटर्न
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       string convert(int n){
          string ret = "";
          while(n){
             ret += (n % 2) + '0';
             n >>= 1;
          }
          return ret;
       }
       int findIntegers(int num) {
          string bits = convert(num);
          int n = bits.size();
          vector <int> ones(n);
          vector <int> zeroes(n);
          ones[0] = zeroes[0] = 1;
          for(int i = 1; i < n; i++){
             zeroes[i] = zeroes[i - 1] + ones[i - 1];
             ones[i] = zeroes[i - 1];
          }
          int ret = ones[n - 1] + zeroes[n - 1];
          for(int i = n - 2; i >= 0; i--){
             if(bits[i] == '0' && bits[i + 1] == '0') ret -= ones[i];
             else if(bits[i] == '1' && bits[i + 1]== '1') break;
          }
          return ret;
       }
    };
    main(){
       Solution ob;
       cout << (ob.findIntegers(7));
    }

    इनपुट

    7

    आउटपुट

    5

    1. C++ में K अतिरिक्त पूर्णांकों के बाद माध्यिका

      इस समस्या में, हमें n पूर्णांकों की एक सरणी दी जाती है और हम सरणी में K तत्व जोड़ रहे हैं और फिर परिणामी सरणी का माध्यिका ज्ञात करते हैं। शर्त को देखते हुए, N+k विषम है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट - array = {23, 65, 76, 67} ; k =1 आउटपुट - 67 इस समस्या को हल करने के लिए, हम

    1. C++ में दो पूर्णांकों को विभाजित करें

      मान लीजिए कि हमारे पास दो पूर्णांक लाभांश और भाजक हैं। हमें दो पूर्णांकों को गुणा, भाग और मॉड ऑपरेटर का उपयोग किए बिना विभाजित करना होगा। भाज्य को भाजक से भाग देने के बाद भागफल लौटाएँ। पूर्णांक विभाजन शून्य की ओर छोटा होना चाहिए। दोनों इनपुट पूर्णांक हैं अतः यदि दिए गए इनपुट लाभांश =7, भाजक =-3 हैं

    1. जाँच करें कि क्या किसी संख्या को C++ में लगातार तीन पूर्णांकों के योग के रूप में लिखा जा सकता है

      इस भाग में हम देखेंगे कि क्या किसी संख्या को ट्री क्रमागत संख्याओं के रूप में निरूपित किया जा सकता है या नहीं। मान लीजिए एक संख्या 27 है। इसे 8 + 9 + 10 के रूप में दर्शाया जा सकता है। इसे दो अलग-अलग तरीकों से हल किया जा सकता है। पहला दृष्टिकोण भोला दृष्टिकोण है। उस दृष्टिकोण में, हमें जांचना होगा क