老师布置的小组作业,好像是曾经的蓝桥杯题目,自己琢磨一下写出来了,写都写了还都加了注释,就想着不如发到这上面了,有遇到类似问题的可以看看,代码比较笨但是很好理解。
#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);
}
标签:汽水,20,temp,int,兑换,answer,空瓶
From: https://blog.csdn.net/2302_82293971/article/details/139536808