हमें एक संख्या 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