P8627 [蓝桥杯 2015 省 A] 饮料换购

· · 题解

题意

n 瓶饮料,喝完 3 瓶可以换 1 瓶,求最后一共可以喝多少瓶。

解法

思路 1

暴力模拟。

设瓶盖数为 m。当 m\ge3 时一直循环模拟换购,每次循环表示用当前剩余的瓶盖换购后,再将新的饮料喝完。我们称这样一次循环为“一轮”。

每一轮可以多换购 \left\lfloor\dfrac{m}{3}\right\rfloor 瓶,还剩下 m\mod 3 个瓶盖,而喝完后,又会多 \left\lfloor\dfrac{m}{3}\right\rfloor 个瓶盖。

思路 2

列方程。

设最后喝了 x 瓶饮料,则共有 x-n 瓶饮料是换购来的。

因为最后 1 个瓶盖无法换购,那么实际参与了换购的瓶盖只有 x-1 个。

则可以列出方程:

x-n=\dfrac{x-1}{3}

最后解得:

x=\dfrac{3n-1}{2}

故答案为 \dfrac{3n-1}{2}

代码

思路 1

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;//我们可以直接用 n 代表剩余瓶盖数
    cin>>n;
    int sum=n;//sum 为总喝的饮料数
    while(n>2) sum+=n/3,n=n%3+n/3;//模拟换购
    cout<<sum;
    return 0;
}

思路 2

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    cout<<(3*n-1)/2;//推出的式子
    return 0;
}