Phải có trình tự gồm N 0 và M 1 sao cho chuỗi được tạo thành không được chứa hai chữ 0 liên tiếp với ba chữ 1 liên tiếp.
Đầu vào - N =5 M =9
Đầu ra - 1 1 0 1 1 0 1 1 0 1 0 1 0 1
Lưu ý - Để thực hiện dãy số trên, câu lệnh (m
Trước tiên, bạn nên xem qua lôgic câu hỏi và thử bản thân thay vì chuyển sang giải pháp được đưa ra ngay bên dưới.
Thuật toán
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
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra kết quả sau.
1 1 0 1 1 0 1 1 0 1 0 1 0 1