c语言基础问题:1瓶汽水1元,2个空瓶可以换一瓶汽水,20元可以喝多少瓶汽水?

老师布置的小组作业,好像是曾经的蓝桥杯题目,自己琢磨一下写出来了,写都写了还都加了注释,就想着不如发到这上面了,有遇到类似问题的可以看看,代码比较笨但是很好理解。

#include<stdio.h>
int main()//1瓶汽水1元,2个空瓶可以换一瓶汽水,20元可以喝多少瓶汽水?
{
	int yuan = 20;//本金极其本金可购买的汽水瓶数(因为题设汽水价格为故无需计算便可以得到)
	int count = 0;//空瓶数目
	int answer = 0;//答案最后可以喝的汽水数目
	int temp;//用于储存临时变化的空瓶数目
	int duoyu=0;/*这个变量专门用于处理瓶盖数量大于2但是为奇数的状况,
	            用于储存为奇数时多出来不能进行兑换的空瓶数目*/
	printf("1瓶汽水1元,2个空瓶可以换一瓶汽水,20元可以喝多少瓶汽水?\n\n");
	
	count = yuan/1;//记录初始会产生的空瓶数目
	answer = yuan/1;//可以喝的汽水数目
	temp=count/2;/*第一次进行空瓶兑换后产生的空瓶数目,
	  // 同时产生的空瓶数也等于增加的汽水数目,所以下面的式子用temp作为汽水的增加值*/
	
	answer+=temp;//这个式子用于记录每次空瓶兑换完汽水以后增加的汽水数量,后续会频繁出现。
    while(count!=1)//当最后空瓶数量为1时,则不能达成兑换条件,循环结束输出结果
	{	
		if(temp%2!=0)//若在兑换后空瓶为奇数则执行下面的换算代码
		{
			--temp;//先让空瓶数目-1成为偶数,再去兑换汽水
			duoyu++;//多出来的空瓶不能兑换汽水的空瓶加1记录
			temp/=2;//剩余为偶数的空瓶进行汽水兑换
			answer+=temp;//已有解释在上
			temp+=duoyu;//兑换完之后的空瓶数加上之前多余的空瓶
			duoyu=0;//多余空瓶已经加回去了,故在这里恢复初始值0。			
		}
		else//若为偶数瓶盖则运行以下代码
		{
			temp/=2;//同上已有解释
			answer+=temp;//同上已有解释
		}
		count=temp;//返回进行兑换后剩余的空瓶数目以作为循环是否继续的判断条件
		
	} 
	printf("答:20元可以喝%d瓶汽水\n",answer);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值