สร้างลำดับของ 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