文章目录
- 一、题目
- 二、思路
- 三、代码实现
- 3.1方法一
- 3.1方法二
一、题目
提示:以下是本篇文章正文内容,下面案例可供参考
二、思路
- 20元首先可以喝20瓶,此时手中有20个空瓶子
- 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余:empty/2(两个空瓶子换的喝完后产生的瓶子) + empty%2(不够换的瓶子)
- 如果瓶子个数超过1个,可以继续换,即重复2
三、代码实现
3.1方法一
int main()
{
int money = 0; //钱的数量
int total = 0; //总共喝了多少瓶水
int empty = 0; //空瓶子的数量
scanf("%d", &money);
total = money; //钱的数量等于可以喝水的总数
empty = money; //空瓶子的数量等于刚开始给的钱的总数
while(empty>1)
{
total += empty/2;
empty = empty/2+empty%2;
}
printf("total = %d\n", total);
return 0;
}
3.1方法二
按照上述喝水和用瓶子换的规则的话,可以发现,1元可以换一瓶水,2元可以换3瓶水,3元可以换4瓶水,5元可以换9瓶水,6元可以换11瓶水。。。依次类推
其实就是个等差数列:money*2-1
int main()
{
int money = 0;
int total = 0;
int empty = 0;
scanf("%d", &money);
if(money <= 0)
{
total = 0;
}
else
{
total = money*2-1;
}
printf("total = %d\n", total);
return 0;
}