在 C 程序中打印 n 个 0 和 m 个 1,使没有两个 0 在一起,也没有三个 1 在一起
n 个 0 和 m 个 1 应按顺序排列,这样形成的序列不能包含两个连续的 0 和三个连续的 1。
输入 − 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) 应为 false,如果为 true,则无法生成上述序列。
建议先了解问题逻辑,然后自己尝试,而不是直接跳转到下面给出的解决方案。
算法
START Step 1 -> take values in ‘n’ and ‘m’ Step 2 -> Loop IF m=n-1 Loop While m>0 and n>0 Print 01 Decrement m and n by 1 End Loop While Loop IF n!=0 Print 0 End IF Loop IF m!=0 Print 1 End IF Step 3-> Else (m < n-1) || m >= 2 * (n + 1) Print cn’t have sequence for this Step 4 -> Else Loop While m-n > 1 && n > 0 Print 1 1 0 Decrement m by 2 and n by 1 End While Loop While n>0 Print 1 0 Decrement m and n by 1 End While Loop While m>0 Print 1 Decrement m by 1 End While Step 5-> End Else STOP
示例
#include <stdio.h>
#include <math.h>
int main() {
int n =5, m=9;
if( m == n-1 ) { //If m is 1 greater than n then consecutive 0's and 1's
while( m > 0 && n > 0 ) { //Loop until all m's and n's
printf("01");
m--;
n--;
}
if ( n!=0 ) //Print the remaining 0
printf("0");
if( m!=0 ) //Print the remaining 1
printf("1");
}
else if ( (m < n-1) || m >= 2 * (n + 1) ) { //If this is true the sequence can't be made
printf("Can't have sequence for this
");
} 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP