N शून्य और M एक का एक अनुक्रम होना चाहिए जिससे बना अनुक्रम दो लगातार शून्य और तीन लगातार एक न रखे।
इनपुट - N=5, M=9
आउटपुट - 1 1 0 1 1 0 1 1 0 1 0 1 0 1
नोट - उपरोक्त अनुक्रम बनाने के लिए, कथन (m < n-1) || m >= 2*(n+1) गलत होना चाहिए; यदि यह सत्य है तो हम उपरोक्त अनुक्रम नहीं बना सकते।
सीधे समाधान पर जाने के बजाय पहले प्रश्न के तर्क को समझने और स्वयं प्रयास करने की सलाह दी जाती है।
एल्गोरिदम
शुरुआत
चरण 1 -> 'n' और 'm' में मान लें
चरण 2 -> यदि m == n-1
लूप जबकि m > 0 और n > 0
"01" प्रिंट करें
m और n को 1 से घटाएं
लूप समाप्त
यदि n != 0 तो 0 प्रिंट करें
यदि m != 0 तो 1 प्रिंट करें
चरण 3 -> अन्यथा यदि (m < n-1) || m >= 2*(n+1)
"इसके लिए अनुक्रम नहीं बना सकते" प्रिंट करें
चरण 4 -> अन्यथा
लूप जबकि m-n > 1 और n > 0
"1 1 0" प्रिंट करें
m को 2 से और n को 1 से घटाएं
लूप समाप्त
लूप जबकि n > 0
"1 0" प्रिंट करें
m और n को 1 से घटाएं
लूप समाप्त
लूप जबकि m > 0
"1" प्रिंट करें
m को 1 से घटाएं
लूप समाप्त
चरण 5 -> अन्यथा समाप्त
रुकें
उदाहरण
#include <stdio.h>
#include <math.h>
int main() {
int n = 5, m = 9;
if (m == n - 1) {
while (m > 0 && n > 0) {
printf("01");
m--; n--;
}
if (n != 0) printf("0");
if (m != 0) printf("1");
} else if ((m < n - 1) || m >= 2 * (n + 1)) {
printf("Can't have sequence for this\n");
} else {
while (m - n > 1 && n > 0) {
printf("1 1 0 ");
m -= 2; n--;
}
while (n > 0) {
printf("1 0 ");
n--; m--;
}
while (m > 0) {
printf("1 ");
m--;
}
}
return 0;
}
आउटपुट
1 1 0 1 1 0 1 1 0 1 0 1 0 1