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

C 語言雙重循環導致重複輸出的原因分析

     編輯:程式設計疑難解答

問題代碼

#include <stdio.h>
int main() {
    for(int i=1; i<=46; i++) {
        for(int j=i+2; j<=48; j++) {
            // for(int num1=i; num1<=46; num1++)
            // 為什麼這兩行寫了就會出來很多重復的呢?
            // for(int num2=j; num2<=48; num2++)
            int change=0;
            change = i*(i+1) - i - i - 1;
            change += j*(j+1) - j - j - 1;
            if(change == (2015-1225)) {
                printf("%d %d\n", i, j);
            }
        }
    }
}

問題分析

註釋掉的兩層循環(num1、num2)若打開,會導致大量重複輸出。原因是:當外層循環找到滿足條件的 (i, j) 對(如 [10,27] 和 [16,24])時,內層兩個循環會遍歷所有 num1 ≥ i 且 num2 ≥ j 的組合,每次都滿足 if 條件,從而重複打印。

具體計算

  • 對於 (10,27):內層循環執行 (46-10+1) × (48-27+1) = 37 × 22 = 814 次
  • 對於 (16,24):內層循環執行 (46-16+1) × (48-24+1) = 31 × 25 = 775 次

總共會輸出 1589 行重複結果。

解決建議

若需統計輸出次數,可引入計數器變量驗證。正確邏輯應僅在最外層循環判斷條件並輸出,避免多餘嵌套循環。

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