কম্পিউটার টিউটোরিয়াল

সি++-এ.Sequential 1 ছাড়া নন-নেগেটিভ ইন্টিজার


মান লিইয়ে নিই একটি পজিটিভ ইন্টিজার n রয়েছে। আমাদের n-এর চেয়ে ছোট বা সমান নন-নেগেটিভ ইন্টিজার বের করতে হবে। শর্ত হল বাইনারি রিপ্রেজেন্টেশন-এ.Sequential 1 থাকবে না। সুতরাং যদি ইনপুট 7 হয়, তবে উত্তর হবে 5, কারণ 5-এর বাইনারি রিপ্রেজেন্টেশন 101।

समाधान पद्धति

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

  • convert() ফাংশন সংজ্ঞায়িত করুন, যা n গ্রহণ করবে,
  • ret := খালি স্ট্রিং
  • যতক্ষণ n নন-জিরো, করুন:
    • ret := ret + (n mod 2)
    • n := n কে ১ বার রাইট শিফ্ট করুন
  • ret ফেরত দিন
  • মূল পদ্ধতিতে নিম্নলিখিত কাজ করুন:
    • bits := convert(num) ফাংশন কল করুন
    • n := bits-এর আকার
    • আকার n-এর একটি ones সরণি, আকার n-এর একটি zeroes সরণি সংজ্ঞায়িত করুন
    • ones[0] := 1, zeroes[0] := 1
    • i := 1 থেকে आरंभ করুন, जब i < n, আপডেট করুন (i 1 বাড়ান), করুন:
      • zeroes[i] := zeroes[i - 1] + ones[i - 1]
      • ones[i] := zeroes[i - 1]
    • ret := ones[n - 1] + zeroes[n - 1]
    • i := n - 2 থেকে आरंभ করুন, जब i >= 0, আপডেট করুন (i 1 কমান), করুন:
      • যদি bits[i] '0'-এর সমান হয় এবং bits[i + 1] '0'-এর সমান হয়, তবে:
        • ret := ret - ones[i]
      • অন্যথায় যদি bits[i] '1'-এর সমান হয় এবং bits[i + 1] '1'-এর সমান হয়, তবে:
        • লুপ থেকে বের হোন
    • ret ফেরত দিন

उदाहरण

बेहतर समझ के लिए निम्नलिखিত कार्यान्वयन देखें:

#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++-এ পূর্ণসংখ্যা স্ট্রিমের মধ্যমা (Median in a Stream of Integers)

  2. C++-এ Kটি অতিরিক্ত পূর্ণসংখ্যা যোগ করার পর মধ্যমা (Median after K Additional Integers)

  3. গুণ, ভাগ এবং মড অপারেটর ছাড়া দুটি পূর্ণসংখ্যা ভাগ করা C++-এ

  4. C++ প্রোগ্রাম: সংখ্যা ৩টি কনsekutিভ ইন্টিজারের যোগফল কিনা চেক