饮料换购
题目描述
题意解释
核心思路
初始有 n n n瓶饮料。设能够喝到的饮料数量为 r e s res res,我们先喝完 n n n瓶饮料,也就是初始时 r e s = n res=n res=n,那么得到 n n n个盖子,那么这 n n n个盖子可以换 n / 3 n/3 n/3瓶饮料,也就喝到了 r e s + = n / 3 res+=n/3 res+=n/3瓶饮料,还余下 n % 3 n\%3 n%3个盖子, n / 3 n/3 n/3瓶饮料也就有 n / 3 n/3 n/3个盖子,因此总的盖子数目为 n / 3 + n % 3 n/3+n\%3 n/3+n%3。一直迭代循环,直到最终的盖子小于3,则退出循环,不能再换购了
代码
#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int res=n; //初始时直接喝完n瓶 然后产生了n个盖子
while(n>=3)
{
//n个盖子可以换n/3瓶饮料,因此又能喝到res+=n/3瓶饮料
res+=n/3;
//n不一定能整除3,因此换购时,还会有剩余的瓶盖,也就是余下n%3个盖子
//然后换购n/3瓶饮料,喝完后,又产生了n/3个盖子
//因此现在总共有n/3+n%3个盖子
n=n/3+n%3;
}
printf("%d\n",res);
return 0;
}