应该有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