作者:Linux猿
简介:CSDN博客专家,华为云享专家,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……
欢迎小伙伴们点赞、收藏⭐、留言
目录
一、题目描述
二、输入描述
三、输出描述
四、测试样例
五、解题思路
六、代码实现
注意:题目来源于网络,本文仅分享做题思路和方法,如有侵权请联系我删除!
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。 小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足 1 <= n <= 100;
注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
输入样例:
3
10
81
0
输出样例:
1
5
40
样例说明:
样例 1 解释:用三个空瓶换一瓶汽水,剩一个空瓶无法继续交换。
样例 2 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一个空瓶再用三个空瓶换一瓶汽水喝完得一个空瓶还给老板。
本题其实是一道数学题,在本题中,可以用三个空汽水瓶换一瓶水,并且可以向老板借空汽水瓶(需要归还),注意:借汽水瓶的情况可以留到最后无法换的时候再借(实际上什么时候借都是一样的结果)。
先用手上的汽水瓶换汽水,假设手上有 n 个汽水瓶,n > 2 时进行如下处理:
(1)如果 n = 1,无法换取,结束;
(2)如果 n = 2,借一个汽水空瓶,凑足三个空瓶,换一瓶汽水,喝完将汽水瓶返还给老板,这样多喝了一瓶水;
(3)如果 n >= 3,换取一次,可以换到的汽水的数量为 n / 3,剩余的空瓶为 n % 3,喝掉换来的汽水,总的空瓶数量为 n / 3 + n % 3,这一次换取喝了 n / 3 瓶汽水;
(4)继续执行步骤(1)
代码实现如下所示:
#include
using namespace std;
int main()
{
int n;
while (cin>>n && n) { // 输入 n,n 不为 0 进入循环
int ans = 0; // 记录总共和了多少瓶
while (n > 2) { // 不断换取汽水
ans += n/3; // 记录喝的汽水
n = n%3 + n/3; // 更新当前的汽水瓶数量
}
if (n == 2) { // 剩余两个可以暂时借一个,喝完再还给老板空瓶
ans += 1;
}
cout<
感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言,感谢大家的一路支持!猿哥将持续输出「优质文章」回馈大家!