1+2 -> 3
1+2+2 -> 6
1+2+2+2 -> 9
….
100个人,3人做一组,共33组,余1人,也即100/3==33, 100%3==1,3瓶水换一瓶,也即一组需要买两瓶(需要有一个作为启动),所以结论很明显了,100/33*2+1=67
# python
def need(n, b):
return int(n/b*(b-1))+n%b
以上更多是一种规律、智力的方法;
我们接着使用更为常规的一般的编程手段实现对所需瓶盖的计算:
int need(int n, int k)
{
// n: 表示需要喝饮料的人数
// k: 表示多少瓶盖可以换一瓶水
int cnt, drunk, caps = 0, 0, 0;
// cnt: 表示买多少瓶水
// drunk: 表示已喝过水的人数
// caps: 当前的瓶盖数
while (drunk < n)
{
++cnt; ++drunl; ++caps;
if (caps % k == 0) // if(caps == k)
{
++drunk;
caps = 1;
}
}
return cnt;
}
int main(int, char**)
{
std::cout << need(100, 3) << std::endl;
// 67
return 0;
}