帅哥,你的答案是不是有点缺陷呢,k++ 而不是k+=n 吧,我的思路如下
我来解释,注释比较清晰,还希望采纳,感谢
#include <stdio.h>
int main(void)
{
int n = 2; // 初始瓶数,有水的瓶子
int k = 0; // 空瓶数量
int s = 0; // 一共喝了多少瓶
int g = 0; // 瓶盖数量
printf("Total %d \n", n);
while(n > 0){
s ++; // 只要有水,就喝
k ++; // 每次喝完一个,空瓶加1
g ++; // 每次喝完一个,瓶盖加1
n --; // 每次喝完一个,有水的瓶子减一
n += k / 2 + g / 4; // k/2 只有k=2的时候,n才加1,k=1的时候,k/2=0,所以不影响n的数量,g同理
k = k % 2; // 取余,k=1 的时候,k%2=1; k=2的时候,由于可以换新的可乐了,因此k=2/2=0,没有空瓶了
g = g % 4; // 取余,道理同k
}
printf("一共喝了 %d 瓶", s);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,sum,nn;
int main(){
cin>>n;
nn=n;
sum=n;
while(n>3){
sum+=n%4;
n/=4;
n+=nn%4;
nn=n;
}
cout<<sum;
return 0;
}
先把你手里的n瓶可乐全部喝掉,得到n个可乐瓶,再用n个可乐瓶换取n/4瓶可乐……以此类推
s是 可以喝多少瓶
k是空瓶
g是瓶盖
n是可以兑换多少瓶
n=k/2+g/4 就是2个空瓶兑一瓶 和 4个瓶盖兑一瓶 ,一共可以兑多少瓶
k%=2 就是还剩下几个空瓶子
g%=4就是还剩下几个瓶盖
下次循环之后更新参数
k=k+n;之前剩余的空瓶 和 刚刚兑换的瓶子相加
g=g+n;同理是瓶盖