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

百錢買百雞窮舉法:三重循環優化避免無限循環

     編輯:程式設計疑難解答

問題

公雞 5 元/只,母雞 3 元/只,小雞 1 元/3 只 (即 1/3 元/只)。100 元買 100 只,求所有解。

優化邊界

  • 公雞最多 100/5 = 20 只。
  • 母雞最多 100/3 ≈ 33 只。
  • 小雞數量必須是 3 的倍數,設 z = 3*k。

優化代碼

int main() {
    for (int x = 0; x <= 20; x++) {       // 公雞
        for (int y = 0; y <= 33; y++) {   // 母雞
            int z = 100 - x - y;          // 小雞
            if (z % 3 == 0 && 5*x + 3*y + z/3 == 100) {
                printf("公雞:%d 母雞:%d 小雞:%d\n", x, y, z);
            }
        }
    }
    return 0;
}

結果

公雞:0  母雞:25  小雞:75
公雞:4  母雞:18  小雞:78
公雞:8  母雞:11  小雞:81
公雞:12 母雞:4   小雞:84

關鍵修正

  • 原代碼三重循環且未限制範圍,導致效率極低甚至看似無限循環。
  • 利用總數約束消去一層循環,複雜度從 O(n³) 降為 O(n²)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved