软件工程今日总结
两个小时
200行
include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j,k=0;
cin>>n;
for(i=3;i<=n;i+=2)
{
k++;
}
if(i>n)
cout<<k+n<<endl;
return 0;
}
买 n 瓶饮料,喝完 3 瓶可以换 1 瓶,求最后一共可以喝多少瓶。
解法
思路 1
暴力模拟。
设瓶盖数为 m。当 m≥3 时一直循环模拟换购,每次循环表示用当前剩余的瓶盖换购后,再将新的饮料喝完。我们称这样一次循环为“一轮”。
每一轮可以多换购 ⌊
3
m
⌋ 瓶,还剩下 mmod3 个瓶盖,而喝完后,又会多 ⌊
3
m
⌋ 个瓶盖。
思路 2
列方程。
设最后喝了 x 瓶饮料,则共有 x−n 瓶饮料是换购来的。
因为最后 1 个瓶盖无法换购,那么实际参与了换购的瓶盖只有 x−1 个。
则可以列出方程:
x−n=
3
x−1
最后解得:
x=
2
3n−1
故答案为
2
3n−1
。

浙公网安备 33010602011771号