首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言經典數學題:汽水換購問題(20元最多喝幾瓶)

     編輯:關於C語言

C語言經典數學題:汽水換購問題(20元最多喝幾瓶)

每瓶汽水 1 元,2 個空瓶換 1 瓶。20 元最多能喝幾瓶?

數學建模

初始:money=20, total=20, empty=20
循環:用空瓶換新瓶 → 喝掉 → 產生新空瓶
關鍵:每 2 空瓶換 1 瓶,喝完又得 1 空瓶,實際每喝 1 瓶「消耗」1 空瓶

遞歸關係

f(empty) = 0                    if empty < 2
f(empty) = empty/2 + f(empty/2 + empty%2)  otherwise

迭代實現(原文版本)

#include <stdio.h>
#define MAX 20

int main() {
    int money = MAX;
    int total = MAX;
    int empty = MAX;
    
    while (empty >= 2) {
        int new_bottles = empty / 2;
        total += new_bottles;
        empty = new_bottles + empty % 2;  // 新空瓶 + 剩餘空瓶
    }
    
    printf("最多能喝 %d 瓶\n", total);
    return 0;
}

運行過程追蹤 (20元)

初始:喝20瓶,空瓶20
第1輪:20空瓶換10瓶,喝10,總30,空瓶10
第2輪:10空瓶換5瓶,喝5,總35,空瓶5
第3輪:5空瓶換2瓶(剩1),喝2,總37,空瓶3(2+1)
第4輪:3空瓶換1瓶(剩1),喝1,總38,空瓶2(1+1)
第5輪:2空瓶換1瓶,喝1,總39,空瓶1
結束:空瓶<2,無法再換
答案:39瓶

通用公式

若 n 元,2 空瓶換 1 瓶,最大飲用量 = 2n - 1(當 n 為 2 的冪次時精確,其它情況略小)。
20 元 → 39 瓶。

擴展:3 空瓶換 1 瓶

int max_drink(int money, int exchange_rate) {
    int total = money;
    int empty = money;
    while (empty >= exchange_rate) {
        int new_b = empty / exchange_rate;
        total += new_b;
        empty = new_b + empty % exchange_rate;
    }
    return total;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved