2024年12月30日
牛客网-华为题库-汽水瓶
C++, 华为题库, 算法
0 Comments
1.汽水瓶
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。
小张手上有 nn 个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M输入描述:
本题将会给出 组测试数据,确切数字未知,您需要一直读入直到特定的结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下: 在一行上输入一个整数n ,代表小张手上的空汽水瓶数量。特别地, n=0代表输入结束,您只需要立即退出,不需要针对这种情况进行处理。
输出描述:
对于每一组测试数据,新起一行。输出一个整数,代表小张最多可以喝到的汽水数量。
示例1输入例子:
3 10 81 0
输出例子:
1 5 40
例子说明:
对于第一组测试数据,共有 个空瓶,可以换 瓶汽水。可以证明无法再做任何兑换,因此最多可以喝到 瓶汽水。
对于第二组测试数据:
第一轮兑换,共有 个空瓶。可以换 瓶汽水,余下 个空瓶;
第二轮兑换,刚刚余下 个空瓶、加上刚刚兑换的 瓶汽水喝完,共有 个空瓶。可以换 瓶汽水,余下 个空瓶;
第三轮兑换,刚刚余下 个空瓶、加上刚刚兑换的 瓶汽水喝完、再找老板借 个空瓶,共有 个空瓶。可以换 瓶汽水,余下 个空瓶。喝完之后不要忘记归还借的空瓶。
综上,一共可以喝到 瓶汽水。
#include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n) { // 注意 while 处理多个 case
if(n == 0)
return 0;
int rem = n;
int exchange = 0;
while(rem > 1)
{
exchange += rem/3;
rem = rem/3 + rem%3 ;
if(rem == 2)
{
exchange +=1 ;
break;
}
}
cout<<exchange<<endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")