打印n 0和m 1,以使C程序中没有两个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)如果为true,则应为false,这是我们无法建立上述序列的原因。

建议先通过问题逻辑来尝试一下,而不要跳到下面直接给出的解决方案。

算法

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\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

以上是 打印n 0和m 1,以使C程序中没有两个0和三个1在一起 的全部内容, 来源链接: utcz.com/z/334917.html

回到顶部