Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

พิมพ์ลำดับ 0 และ 1 จำนวน n, m ให้ไม่มี 0 ติดกัน 2 ตัว และ 1 ติดกัน 3 ตัว ในภาษา C

สร้างลำดับของ 0 จำนวน n ตัว และ 1 จำนวน m ตัว โดยที่ไม่มี 0 ติดกัน 2 ตัว และไม่มี 1 ติดกัน 3 ตัว

เงื่อนไขที่เป็นไปไม่ได้

หาก (m < n-1) || m >= 2*(n+1) เป็นจริง → ไม่สามารถสร้างลำดับได้

ตัวอย่าง

Input: n=5, m=9

Output: 1 1 0 1 1 0 1 1 0 1 0 1 0 1

อัลกอริทึม

  • ถ้า m == n-1: สลับพิมพ์ "01" จนหมด
  • ถ้าเงื่อนไขไม่เป็นไปได้: พิมพ์ข้อความ error
  • อื่นๆ: พิมพ์ "1 1 0" ซ้ำจน m-n <= 1, แล้วพิมพ์ "1 0" ซ้ำ, แล้วพิมพ์ 1 ที่เหลือ

โค้ดตัวอย่าง

#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("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