蓝桥杯——【第六届】饮料换购【B组】

该问题是一个数学和编程问题,涉及简单的模拟和算术运算。给定初始购买的饮料数量n,每次可以用3个瓶盖换一瓶新饮料,程序需计算出最大可能喝到的饮料总量。通过不断用剩余瓶盖换购并更新饮料数量,直到剩余瓶盖不足3个为止。提供的C++代码实现了这个逻辑,计算并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。

输入格式

输入一个整数 nn,表示初始买入的饮料数量。

输出格式

输出一个整数,表示一共能够喝到的饮料数量。

数据范围

0<n<10000

输入样例1:
100
输出样例1:
149

输入样例2:
101
输出样例2:
151

______________________________________________________________________________________________________

资源约定:

  峰值内存消耗(含虚拟机) < 256M

  CPU消耗 < 1000ms

  请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

  所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

  注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

  注意:主类的名字必须是:Main,否则按无效代码处理。

______________________________________________________________________________________________________

原题链接

思路: 简单模拟一下,就发现规律啦
文字解释:
假设开始时有10瓶饮料,每瓶饮料可以得到一个瓶盖。那么一开始有10瓶饮料。

先喝掉这10瓶饮料,得到10个瓶盖,此时手上有10个瓶盖。n = 10

将这10个瓶盖兑换成3瓶饮料(n/3),剩下1个瓶盖(n%3),再将这3瓶饮料喝掉,得到3个瓶盖,此时手上总共有4个瓶盖。(n/3+n%3)

将这4个瓶盖兑换成1瓶饮料,剩下1个瓶盖。再将这1瓶饮料喝掉,得到1个瓶盖,此时手上有2个瓶盖。(换不了了!)

式子提取:
以 10 瓶为例子,设n为一开始买入的瓶子,m为可以直接换取的,x为换之后剩余的瓶子

① n = 10, m = 10/3 = 3 x = 1

② n = 3 + 1 = 4 ,m = 4/3 = 1 x = 1

③因为现在手上还有的瓶盖数目为1 + 1 < 3因此,可以换取的总数目就是 **m总 = 3 + 1 = 4**

变成规律很容易看出来

变成n、m、x的式子: m总 += n/3, n = n / 3 + n%3 (换取的瓶子可以产生1个瓶盖,加上换取后剩下的瓶盖,变成新的n)

画图:

代码部分:

#include<iostream>
#include<algorithm> 
using namespace std;
int main()
{
    int n,m = 0,x = 0;  //定义变量n为初始饮料数量,m为最多可以喝到的饮料数量,x暂未使用
    cin >> n;           //输入初始饮料数量
    m = n;              //将初始饮料数量加入最多可以喝到的饮料数量中,因为最初买入的饮料可以直接喝
    while(n >= 3)       //只有当剩余的饮料数量大于等于3时才进行兑换
    {
        m += n/3;     //计算可以直接兑换得到的饮料数量,加入最多可以喝到的饮料数量中
        n = n/3 + n%3; //计算喝掉的饮料数量,加上剩余的瓶盖数量和空瓶子数量,作为下一轮的初始饮料数量
    }
    cout<<m;            //输出最多可以喝到的饮料数量    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值