买牛奶
描述
去年小明加的小卖部举办了一个活动,可以用牛奶瓶和盖子换牛奶,小明觉得太亏了,于是决定今年只能用瓶子换牛奶,但是你可以找写小明借瓶子,但是必须还给小明。现在你手上有n个瓶子,请问你最多可以喝几瓶牛奶,你可以用三个瓶身换一瓶牛奶
day11-03.zip
输入
有多组数据,每组数据一个整数n(n<=1000),表示你一开始手上有的瓶子数量,输入遇到0时,表示结束
输出
每组数据对应一个结果,每个数据占一行
输入样例 1
5
7
6
0
输出样例 1
2
3
3
提示
样例1解释:拿3个瓶子换一瓶牛奶,剩余1个瓶子和1个牛奶,牛奶喝完就剩余2个瓶子,找小明借一个,凑齐3
应该写明一次只能借1个瓶子,不然一直借就没结束了。运行结果如下:
代码:
#include <iostream>
using namespace std;
int main()
{
int n;
while (1)
{
cin >> n;
if (n == 0)
break;
int cnt = 0; //牛奶个数
while (n>=3)
{
int k = n / 3;
cnt += k;
n = n % 3 + k;
}
if (n == 2)
cnt++; //剩余2个瓶子,借一个
cout << cnt << endl;
}
return 0;
}
#include <iostream>
using namespace std;
int getMaxMilk(int n) {
int total = 0;
int empty = n;
while (empty >= 3) {
int milk = empty / 3;
total += milk;
empty = milk + empty % 3;
}
return total;
}
int main() {
int n;
while (cin >> n && n != 0) {
int maxMilk = getMaxMilk(n);
cout << maxMilk << endl;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 GPT 生成】
#include <iostream>
int main() {
int n;
while (std::cin >> n) {
if (n == 0) {
break;
}
int result = 0;
int borrowed = 0;
while (n >= 3) {
result += n / 3;
borrowed += n / 3;
n = n / 3 + n % 3;
if (borrowed >= 3) {
n += borrowed / 3;
borrowed = borrowed % 3;
}
}
std::cout << result << std::endl;
}
return 0;
}
解题思路: - 使用一个循环,每次判断手上的瓶子数量是否大于等于3。 - 如果大于等于3,将手上的瓶子数量除以3,得到可以兑换的牛奶数量,并将结果累加到最终答案中。 - 同时,将手上的瓶子数量除以3,得到借来的瓶子数量,并将结果累加到借来的瓶子数量中。 - 更新手上的瓶子数量为除以3的结果加上瓶子数量除以3的余数。 - 如果借来的瓶子数量大于等于3,将借来的瓶子数量除以3,得到可以兑换的牛奶数量,并将结果累加到剩余的瓶子数量中。 - 更新剩余的瓶子数量为借来的瓶子数量除以3的余数。 - 输出最终的答案。
【相关推荐】