// 第二區間填充循環錯誤使用了第一區間長度
for(int q=0; q<=b-a; q++) // 應為 d-c
str2[q] = c+q;
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a, b, c, d;
printf("輸入第一個整數區間 (a,b):");
if (scanf("%d,%d", &a, &b) != 2) return 1;
if (a > b) { int t=a; a=b; b=t; } // 確保 a<=b
printf("輸入第二個整數區間 (c,d):");
if (scanf("%d,%d", &c, &d) != 2) return 1;
if (c > d) { int t=c; c=d; d=t; }
// 計算交集:[max(a,c), min(b,d)]
int left = (a > c) ? a : c;
int right = (b < d) ? b : d;
if (left <= right) {
printf("交集為:");
for (int i = left; i <= right; i++) {
printf("%d ", i);
}
printf("\n");
} else {
printf("交集為空集\n");
}
return 0;
}
max(left1, left2)、min(right1, right2) 計算,**無需構建數組、雙重循環比對**,時間複雜度從 O(n²) 降為 O(1)。a>b、c>d、輸入格式錯誤。int str1[b-a] 若區間極大(如 1~1000000)會棧溢出;新版無數組,無此風險。scanf 返回值檢查、變量初始化、邊界條件(空集、單點交集)是 C 程序健壯性基石。一行邏輯錯誤(b-a 寫成 d-c)導致整個算法錯誤,回歸數學定義重寫即得最優解。