Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

In N số 0 và M số 1 không có 2 số 0 liên tiếp và 3 số 1 liên tiếp trong C

Tạo chuỗi N số 0 và M số 1 sao cho không có "00" và không có "111".

Điều kiện tồn tại

Không tạo được nếu: (M < N-1) || (M >= 2×(N+1))

Ví dụ

N=5, M=9 → 1 1 0 1 1 0 1 1 0 1 0 1 0 1

Thuật toán

  • Nếu M = N-1: in xen kẽ "01"
  • Nếu điều kiện vi phạm: báo không tạo được
  • Ngược lại: ưu tiên in "110" cho đến khi M-N ≤ 1, rồi "10", cuối cùng các "1" thừa

Chương trình

#include <stdio.h>

int main() {
    int n = 5, m = 9;
    
    if (m == n - 1) {
        while (m > 0 && n > 0) { printf("01"); m--; n--; }
        if (n) printf("0");
        if (m) printf("1");
    }
    else if (m < n - 1 || m >= 2 * (n + 1)) {
        printf("Khong the tao day\n");
    }
    else {
        while (m - n > 1 && n > 0) { printf("110 "); m -= 2; n--; }
        while (n > 0) { printf("10 "); n--; m--; }
        while (m > 0) { printf("1 "); m--; }
    }
    return 0;
}

Kết quả

1 1 0 1 1 0 1 1 0 1 0 1 0 1