समस्या विवरण
एक संख्या n दी गई है, हमें XOR ऑपरेशन का उपयोग करके संख्या को 2^X - 1 के रूप में बनाने के चरण प्रिंट करने हैं।
- विषम चरण में संख्या को किसी 2^M - 1 के साथ XOR करें, जहां M आपके द्वारा चुना जाता है।
- सम चरण में संख्या को 1 से बढ़ाएं।
चरणों को तब तक करते रहें जब तक n, 2^X - 1 का रूप न ले ले, और सभी चरण प्रिंट करें।
उदाहरण
इनपुट: 22 आउटपुट: चरण 1: 15 के साथ XOR चरण 2: 1 से बढ़ाएं चरण 3: 7 के साथ XOR चरण 4: 1 से बढ़ाएं चरण 5: 1 के साथ XOR इनपुट: 7 आउटपुट: कोई चरण करने की आवश्यकता नहीं
एल्गोरिदम
int find_leftmost_unsetbit(int n)
शुरुआत
चरण 1: ind = -1, i = 1 घोषित और असाइन करें
चरण 2: जब तक n लूप
यदि !(n & 1) तो
ind को i असाइन करें
अंत यदि
i को 1 से बढ़ाएं
n को 1 से बाएं शिफ्ट करें
अंत लूप
चरण 3: ind वापस करें
रोकें
void perform_steps(int n)
शुरुआत
चरण 1: left = find_leftmost_unsetbit(n) घोषित और असाइन करें
चरण 2: यदि left == -1 तो
"कोई चरण करने की आवश्यकता नहीं" प्रिंट करें
वापस करें
अंत यदि
चरण 3: step = 1 घोषित और असाइन करें
चरण 4: जब तक find_leftmost_unsetbit(n) != -1 लूप
यदि step % 2 == 0 तो
n को 1 से बढ़ाएं
"चरण n: 1 से बढ़ाएं" प्रिंट करें
अन्यथा
m = find_leftmost_unsetbit(n) घोषित और असाइन करें
num = (pow(2, m) - 1) सेट करें
n = n ^ num सेट करें
"चरण N: num के साथ XOR" प्रिंट करें
अंत यदि
step को 1 से बढ़ाएं
अंत लूप
रोकें
C प्रोग्राम उदाहरण
#include <stdio.h>
#include <math.h>
// बाएं सबसे अनसेट बिट खोजने के लिए
int find_leftmost_unsetbit(int n){
int ind = -1;
int i = 1;
while (n) {
if (!(n & 1))
ind = i;
i++;
n >>= 1;
}
return ind;
}
void perform_steps(int n){
int left = find_leftmost_unsetbit(n);
if (left == -1) {
printf("कोई चरण करने की आवश्यकता नहीं\n");
return;
}
int step = 1;
while (find_leftmost_unsetbit(n) != -1) {
if (step % 2 == 0) {
n += 1;
printf("चरण %d: 1 से बढ़ाएं\n", step);
} else {
int m = find_leftmost_unsetbit(n);
int num = (int)(pow(2, m) - 1);
n = n ^ num;
printf("चरण %d: %d के साथ XOR\n", step, num);
}
step += 1;
}
}
int main(){
int n = 22;
perform_steps(n);
return 0;
}
आउटपुट
उपरोक्त प्रोग्राम चलाने पर निम्नलिखित आउटपुट उत्पन्न होगा:
चरण 1: 15 के साथ XOR चरण 2: 1 से बढ़ाएं चरण 3: 7 के साथ XOR चरण 4: 1 से बढ़ाएं चरण 5: 1 के साथ XOR