某商店规定:三个空汽水瓶可以换一瓶汽水。
小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶。
方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。
如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
目前想到了两种方法:
一、利用递归
f(1) = 0
f(2) = 1
f(3) = 1
f(4) = f(2)+1
f(5) = f(3)+1
...
f(n) = f(n-2)+1
#include <iostream> using namespace std; int f(int n) { if(n==1) return 0; if(n==2) return 1; return f(n-2)+1; } int main() { int n; while(cin >> n){ if(n==0) break; cout<<f(n)<<endl; } return 0; }
二、经过推导可以发现,喝到的总汽水数量是一开始空瓶子数量的一半
取整数部分
#include <iostream> using namespace std; int main (){ int m; while(cin>>m){ if(m!=0) cout<<m/2<<endl; } return 0; }
C++11