Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 프로그램에서 2개의 0과 3개의 1이 함께 사용되지 않도록 n 0과 m 1을 인쇄하십시오.

<시간/>

N 0 와 M 1 의 시퀀스가 ​​있어야 이렇게 형성된 시퀀스가 ​​2개의 연속 0과 3개의 연속 1을 포함하지 않아야 합니다.

입력 - N=5 M=9

출력 − 1 1 0 1 1 0 1 1 0 1 0 1 0 1

참고 − 위의 수열을 만들기 위해서는 (m =2 * (n + 1)은 위의 시퀀스를 만들 수 없는 것보다 참이면 거짓이어야 합니다.

아래에 직접 제공된 솔루션으로 건너뛰는 대신 먼저 질문 논리를 살펴보고 스스로 시도해 보는 것이 좋습니다.

알고리즘

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