首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言求兩整數區間交集:邏輯錯誤定位與修正代碼

     編輯:程式設計疑難解答

原代碼核心錯誤


// 第二區間填充循環錯誤使用了第一區間長度
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;
}

關鍵修正點

  1. 邏輯簡化:交集本質是 **兩區間重疊部分**,直接用 max(left1, left2)、min(right1, right2) 計算,**無需構建數組、雙重循環比對**,時間複雜度從 O(n²) 降為 O(1)。
  2. 輸入健壯性:處理 a>b、c>d、輸入格式錯誤。
  3. 數組越界風險消除:原代碼 int str1[b-a] 若區間極大(如 1~1000000)會棧溢出;新版無數組,無此風險。

避坑指南

  • 區間題優先思考**數學定義**(交集/並集/差集),再落地代碼,勿盲目用數組模擬。
  • scanf 返回值檢查、變量初始化、邊界條件(空集、單點交集)是 C 程序健壯性基石。

一行邏輯錯誤(b-a 寫成 d-c)導致整個算法錯誤,回歸數學定義重寫即得最優解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved