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

C++ 求最大最小值邏輯錯誤:迴圈變數重複自增導致越界

     編輯:程式設計綜合問答

錯誤代碼

for (i = 0; i <= 4; i++) {
    if (a[i] > a[i++]) { max = a[i]; min = a[i++]; }
    else { max = a[i++]; min = a[i++]; }
}

錯誤分析

  1. 迴圈變數 `i` 在迴圈體內被多次 `++`:`a[i++]` 會修改 `i`,導致下一次迭代 `i` 跳躍,甚至超出陣列邊界 (i=5,6...)。
  2. 邏輯錯誤:比較 `a[i]` 與 `a[i+1]` 只能相鄰比較,無法找出全域最大/最小值。

正確寫法:單次遍歷

int max = a[0], min = a[0];
for (int i = 1; i < 5; i++) {
    if (a[i] > max) max = a[i];
    if (a[i] < min) min = a[i];
}

關鍵點

  • 初始化 `max`、`min` 為第一個元素。
  • 迴圈從 `1` 開始,僅讀取 `a[i]`,不修改 `i`。
  • 時間複雜度 O(n),空間 O(1)。

C++ STL 一行解

auto [minIt, maxIt] = std::minmax_element(std::begin(a), std::end(a));

總結

「迴圈變數不可在迴圈體內修改」是基鐵律。求極值只需單次遍歷,切勿嘗試兩兩比較並修改索引。

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