কম্পিউটার

C++ এ পরপর সংখ্যা ছাড়া অ-ঋণাত্মক পূর্ণসংখ্যা


ধরুন আমাদের একটি ধনাত্মক পূর্ণসংখ্যা n আছে। আমাদের n-এর চেয়ে কম বা সমান অ-ঋণাত্মক পূর্ণসংখ্যা খুঁজে বের করতে হবে। সীমাবদ্ধতা হল বাইনারি উপস্থাপনা ধারাবাহিকভাবে ধারণ করবে না। তাই যদি ইনপুট 7 হয়, তাহলে উত্তর হবে 5, কারণ 5-এর বাইনারি উপস্থাপনা হল 101৷

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

  • একটি ফাংশন রূপান্তর() সংজ্ঞায়িত করুন, এটি n,
  • নেবে
  • ret :=খালি স্ট্রিং
  • যখন n অ-শূন্য, কর −
    • ret :=ret + (n mod 2)
    • n :=ডান শিফট n, 1 বার
  • রিটার্ন রিটার্ন
  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
  • বিটস :=ফাংশন রূপান্তর (সংখ্যা) কল করুন
  • n :=বিটের আকার
  • n আকারের একটি অ্যারে সংজ্ঞায়িত করুন, n আকারের একটি অ্যারের শূন্য সংজ্ঞায়িত করুন
  • ones[0] :=1, zeroes[0] :=1
  • আরম্ভ করার জন্য i :=1, যখন i করুন
  • শূন্য[i] :=শূন্য[i - 1] + ones[i - 1]
  • ones[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++ এ পূর্ণসংখ্যার (চলমান পূর্ণসংখ্যা) একটি প্রবাহে মধ্যমা

    2. C++-এ K অতিরিক্ত পূর্ণসংখ্যার পরে মাঝারি

    3. C++ এ দুটি পূর্ণসংখ্যা ভাগ করুন

    4. একটি সংখ্যা C++ এ পরপর তিনটি পূর্ণসংখ্যার যোগফল হিসেবে লেখা যায় কিনা তা পরীক্ষা করুন