目录
问题描述
解题方法一
解题思路:
代码实现
解题方法二
解题思路:
代码实现
解题方法三
解题思路:
代码实现
总结
问题描述
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水?
解题方法一
解题思路:
每次花1元买一瓶,买完后判断是否有两个空瓶,如果有两个空瓶就直接换一瓶汽水。
代码实现
int main()
{int money = 0;scanf("%d", &money);int bottle = 0;while (money > 0){bottle++;money--;if (bottle % 2 == 0)//2空瓶换一瓶汽水bottle++;}printf("%d\n",bottle);return 0;
}
方法一效率较低,需要循环20次。让我们接下来看方法二
解题方法二
解题思路:
1.首先已知钱是20元,一元一瓶汽水,那可以先把20元全换成汽水。
2.把20瓶空瓶汽水换成10瓶汽水,再把十瓶空瓶汽水换成5瓶汽水,直到没有空瓶可以换。最后把所有空瓶汽水加起来就是20元可以喝的汽水瓶数。
代码实现
int main()
{int money = 0;int bottle = 0;int empty = 0;scanf("%d", &money);bottle = money;empty = money;while (empty > 1){bottle += empty / 2;empty = (empty / 2) + (empty % 2);}printf("%d\n",bottle);return 0;
}
此方法对比方法一的运行效率略好一些。
解题方法三
解题思路:
根据题意,我们可以发现空瓶数是一个等差数列问题:
代码实现
int main()
{int money = 0;int bottle = 0;scanf("%d", &money);if (money > 0)bottle = 2 * money - 1;elsebottle = 0;printf("%d\n", bottle);return 0;
}
如果你能用第三种方式实现,恭喜你应该是用来运行效率最高的方式解决了该问题。
总结
每个人实现代码的思路都不相同,希望我的方法能够帮到你。如果有什么问题也欢迎在评论区与我一起交流。