हमें एक संख्या n दी गई है, हमें वह संख्या ज्ञात करनी है जो n से बड़ी है और जिसमें n के बाइनरी प्रतिनिधित्व से एक अधिक सेट बिट है।
बाइनरी प्रतिनिधित्व में अंक 1 को सेट बिट कहा जाता है।
आइए एक उदाहरण देखते हैं।
इनपुट
124
आउटपुट
125
एल्गोरिदम
- संख्या n आरंभ करें।
- सेट बिट्स की संख्या की गणना प्राप्त करने के लिए एक फ़ंक्शन लिखें।
- पुनरावृत्ति वेरिएबल को n + 1 के साथ आरंभ करें।
- एक अनंत लूप लिखें।
- n से बड़ी संख्याओं के लिए सेट बिट्स की जांच करें।
- जब आप इसे ढूंढ लें तो संख्या वापस करें।
कार्यान्वयन
निम्नलिखित C++ में उपरोक्त एल्गोरिदम का कार्यान्वयन है:
#include <bits/stdc++.h>
using namespace std;
int getSetBitsCount(int n) {
int count = 0;
while (n) {
if (n % 2 == 1) {
count += 1;
}
n /= 2;
}
return count;
}
int getNextGreaterElementWithSameSetBits(int n) {
int setBitsCount = getSetBitsCount(n);
int i = n + 1;
while (true) {
if (setBitsCount + 1 == getSetBitsCount(i)) {
return i;
}
i += 1;
}
}
int main() {
int n = 124;
cout << getNextGreaterElementWithSameSetBits(n) << endl;
return 0;
}
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्नलिखित परिणाम मिलेगा।
125