喝汽水问题,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水。

【问题描述】
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。
【解题思路】
变量解释:money总金额数,price汽水单价,exchange几个空瓶可以换一瓶汽水。
total可以喝到的总瓶数,newbottle由空瓶子交换后的新的汽水,empty空瓶数。

  • 有money元钱,一共可以喝到total (total = money / price)瓶汽水。
  • 喝完后剩余empty (empty = total)个空瓶子。
  • 可以兑换newbottle(newbbottle = empty / exchange)瓶新的汽水,剩余( empty%exchange)个空瓶子,不足兑换一瓶新的汽水。
  • 新兑换的汽水喝完后又会有(newbottle)个空瓶子剩余, 所以目前剩余空瓶子为:empty(empty = newbobttle + 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瓶汽水。

注意:剩余空瓶子为:上次兑换的新的汽水喝完后留下的空瓶子+兑换之后剩余不足以兑换新汽水的空瓶子。例如:(有红色字体标注),20个空瓶子兑换的10瓶水喝完后留下的空瓶子+兑换之后剩余的0空瓶子,所以10+0 = 10个空瓶子。

【代码】

本代码实现了不定金额数,不定汽水单价,不定几个空瓶可以兑换一瓶汽水的情况。代码的适应性较强。

#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 total = money / price;//可以喝到的总瓶数
	int newbottle = 0;	//换后的新的瓶装水
	int empty = total;//空瓶数

	while (empty != (empty % exchange))
	{
		newbottle = empty / exchange; //转换
		total += newbottle; //总的瓶装水
		empty = newbottle + empty % exchange;//剩余的空瓶子
	}

	printf("你一共可以喝到:%d瓶水。\n", total);

	return 0;
}

【结果】
在这里插入图片描述

Ending~:
注意理解循环体循环的终止条件,当可以兑换时,循环继续,不足以兑换时,退出循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值