文章目录
- 每日一言
- 题目
- 解题思路一
- 代码
- 解题思路二
- 代码
- 结语
每日一言
长风沛雨,艳阳明月。田野被喜悦铺满,天地间充满着生的豪情。
题目
已知1瓶汽水1元,2个空瓶可以换一瓶汽水,输入整数n(n>=0),表示n元,计算一共可以得到多少瓶汽水?
解题思路一
因为一瓶汽水一元,所以我们可以把n看做有几瓶汽水。
假设我有5元,也就是5瓶汽水,此时空瓶也是5
题目说两个空瓶可以换一瓶
把每个红色部分看成一瓶,还剩3个空瓶
同理,把每两瓶看做一瓶
把每个红色部分看成一瓶,还剩2个空瓶
把每个红色部分看成一瓶,还剩1个空瓶
接下来数一数一共喝了多少瓶
注意:红圈里的是用空瓶子新换的
一共有5+2+1+1=9瓶
代码
int main() {
int sum = 0;//汽水
scanf("%d", &sum);
int kong = sum;//空瓶数
while (kong>=2) {//空瓶多余2个就兑换
sum += kong/2;//新换的饮料
kong = kong / 2 + kong % 2;//兑换后的空瓶数
}
printf("%d", sum);
return 0;
}
解题思路二
这道题有没有什么规律呢?
当n=1时,sum=1
当n=2时,sum=3
当n=3时,sum=5
当n=4时,sum=7
当n=5时,sum=9
通过以上列举出来的式子,不难总结出 sum = 2*n - 1
以上只是我们通过不完全归纳法证出来的,仔细思考一下到底对不对?
我们可以这样想:2个空瓶可以换1瓶饮料和1个空瓶,相当于一个空瓶换一瓶汽水,不管你开始有几瓶,最后一定只剩一个空瓶,所以sum = 2*n - 1
难道sum的表达式真的是这样吗?
哈哈~别忘了,当n=0时,sum肯定不是负数
代码
int main()
{
int n = 0;//汽水
scanf("%d", &n);
if (n > 0)
printf("%d", n * 2 - 1);
else
printf("0");
return 0;
}
结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正