华为机试在线训练_汽水瓶(数学、模拟)
汽水瓶
http://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f
/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
水木清华
2020-03-13
汽水瓶
*/
#include<iostream>
using namespace std;
//最多可喝的汽水瓶数的函数接口
int Soda_Bottle_Num(int num)
{
int sum = 0; //计数器,最多可以喝的汽水瓶数
int count = 0; //计数器。每一次空瓶换汽水操作可以喝到的汽水瓶数
// 空汽水瓶数小于或等于 1 时,无法喝到汽水,也无法通过“先借后还”方式喝到汽水
if (num <= 1)
{
sum += 0;
}
// 空汽水瓶数大于或等于 2 时,至少可以喝到一瓶汽水,如通过“先借后还”方式就可以喝到汽水
while (num >= 2)
{
num += 1; //只要手上的空汽水瓶数大于或等于2,不论情况如何,先借一个空汽水瓶
count = num / 3; //一次空汽水瓶换汽水操作后可以喝到的汽水瓶数(3 个空汽水瓶换 1 瓶汽水,喝它!)
num = num % 3 + count - 1; //剩下的空汽水瓶数,包括之前没换的空汽水瓶 + 喝完汽水后的空汽水瓶 + 要还回去空汽水瓶(之前借了一个空汽水瓶);
sum += count; //累计可以喝到的汽水瓶数
}
return sum; //返回最多可以喝的汽水瓶数
}
//主函数
int main()
{
int n;
while(cin >> n) //输入测试数据
{
if(n != 0)
{
cout << Soda_Bottle_Num(n) << endl; //输出结果
}
}
return 0;
}
//更简单的方法:注意到每两个空汽水瓶就可以通过借一个空汽水瓶来喝到一瓶汽水,故最多可以喝到的汽水瓶数等于空汽水瓶数除以二,即 sum = num / 2大厂面试 文章被收录于专栏
分享有用的面试经历,倾吐有心的面试感悟,讲述有趣的面试故事,以飨读者。 常用语言是C++,编程力求规范整洁,题解清晰完整,像写诗一样去写代码。 本专栏文章系「人工智能安全」(微信公众号)原创,转载请联系本文作者。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师,期待与你的思想交流碰撞出智慧的花火。

查看13道真题和解析