【问题描述】
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。
【解题思路】
变量解释:money总金额数,price汽水单价,exchange几个空瓶可以换一瓶汽水。
total可以喝到的总瓶数,empty空瓶数。
有money元钱,一共可以喝到total = money / price瓶汽水。
喝完后剩余empty = total个空瓶子。
可以兑换( empty / exchange)瓶新的汽水,剩余( empty%exchange)个空瓶子,不足兑换一瓶新的汽水。
新兑换的汽水喝完后又会有( empty / exchange)个空瓶子剩余, 所以目前剩余空瓶子为:empty = empty / exchange + empty%exchange 个空瓶子。
以此循环,直到剩余的瓶子(empty%exchange)不足以兑换一瓶新的汽水结束。
【本题中】
20元钱,可以喝到20瓶水,
剩余20个空瓶子,可以兑换20/2 = 10瓶汽水,兑换之后剩余20%2 = 0个空瓶子。这时一共可以喝到:20+10 = 30瓶水。
剩余空瓶子10 + 0 = 10个,可以兑换10/2=5瓶水,兑换之后剩余10%2 = 0个空瓶子。这时一共可以喝到:30+5 = 35瓶水。
剩余空瓶子5 + 0 = 5个,可以兑换5/2=2瓶水,兑换之后剩余5%2 = 1个空瓶子。这时一共可以喝到:35+2 = 37瓶水。
剩余空瓶子2 + 1 = 3个,可以兑换3/2=1瓶水,兑换之后剩余3%2 = 1个空瓶子。这时一共可以喝到:37+1 = 38瓶水。
剩余空瓶子1 + 1 = 2个,可以兑换2/2=1瓶水,兑换之后剩余2%2 = 0个空瓶子。这时一共可以喝到:38+1 = 39瓶水。
此时剩余空瓶子1+0=1个,不足以兑换一瓶新汽水,循环结束。一共可以喝到39瓶汽水。
注意:剩余空瓶子为:上次兑换的新的汽水喝完后留下的空瓶子+兑换之后剩余不足以兑换新汽水的空瓶子。
【代码】
本代码实现了不定金额数,不定汽水单价,不定几个空瓶可以兑换一瓶汽水的情况。代码的适应性较强。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int money = 0;
printf("总共有多少钱:");
scanf("%d", &money);
int price = 0;
printf("每瓶汽水单价为:");
scanf("%d", &price);
int exchange = 0;
printf("多少个空瓶可以换一瓶水");
scanf("%d", &exchange);
int tatol = 0;//总共可以喝多少瓶汽水
int empty = 0;//空瓶子数量
tatol = money / price;
empty = tatol;
while (empty >= exchange)
{
tatol = tatol + empty / exchange;//20+10 //30+5 //35+2 //37+1 //38+1
empty = empty / exchange + empty % exchange;//10 //5 //2+1 //1+1 //1
}
printf("一共可以喝到%d瓶汽水", tatol);
}