问题重述
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少瓶汽水。
问题分析
1.买20瓶先!
2.循环的既视感,如下:
喝光光!用20空瓶换10瓶!【剩0个空瓶】
喝光光!用10空瓶换5瓶! 【剩0个空瓶】 [10 = 20/2 + 20%2]
喝光光!用5空瓶换2瓶! 【剩1个空瓶】 [5 = 10/2 + 10%2]
喝光光!用3空瓶换1瓶! 【剩1个空瓶】 [3 = 5/2 + 5%2]
喝光光!用2空瓶换1瓶! 【剩0个空瓶】 [2 = 3/2 + 3%2]
喝光光!用1空瓶换0瓶 【剩1个空瓶】 [1 = 1/2 + 1%2]
3.易知必然会剩下1个空瓶,而1个瓶子也不能让你换。
所以1就是循环的终止条件
C语言实现
int Buycoke(int m)
{ //m: 你有多少钱?
int cnt = m; //喝m瓶先压压惊
while (m > 1) { //必然会剩下一个空瓶
cnt += (m / 2); //两空瓶喝一瓶
m = m / 2 + m % 2; //计算目前手里的所有空瓶
}
return cnt; //喝了多少瓶
}