在 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

更新日期: 08-Aug-2019

163 次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.