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

Java 百錢百雞問題:三重循環優化至雙重循環

     編輯:程式設計綜合問答

問題

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

注:原帖價格描述有誤 (雞蛋/鴨蛋/鵝蛋),此處按經典「百錢百雞」修正。

數學建模

x + y + z = 100          // 總數
5x + 3y + z/3 = 100      // 總價 (z 必須是 3 的倍數)
=> 15x + 9y + z = 300
=> 14x + 8y = 200        // 消去 z
=> 7x + 4y = 100

優化:單層循環求解

public class HundredChickens {
    public static void main(String[] args) {
        for (int x = 0; x <= 100; x++) { // 公雞 0-20
            // 7x + 4y = 100 => y = (100 - 7x) / 4
            int remainder = 100 - 7 * x;
            if (remainder < 0) break;
            if (remainder % 4 == 0) {
                int y = remainder / 4;
                int z = 100 - x - y;
                if (z >= 0 && z % 3 == 0) {
                    System.out.printf("公雞:%d 母雞:%d 小雞:%d%n", x, y, z);
                }
            }
        }
    }
}

輸出所有解

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

原帖三重循環代碼修正

// 原代碼錯誤:價格單位不統一、循環上界錯誤、小雞價格計算錯誤
// 修正版 (按原帖 1毛/3元/6元 即 0.1/3/6 元):
for (int cock = 0; cock <= 100; cock++) {
    for (int hen = 0; hen <= 100 - cock; hen++) {
        int chick = 100 - cock - hen;
        double cost = cock * 0.1 + hen * 3 + chick / 3.0; // 注意除法
        if (Math.abs(cost - 100) < 1e-9) {
            System.out.println(cock + " " + hen + " " + chick);
        }
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved