规则是:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水。
题目是: 给20元,可以喝多少汽水?
思路:如果我们手里有 0 元,一瓶都喝不了,如果有 1 元,可以喝两瓶,因为我们可以先买一瓶,然后手里有一个空瓶子,这时候再和商家借一瓶汽水,喝完之后有两个空瓶子,可以换一瓶汽水,再还给商家.
基于以上思路,我们可以写出一个递归代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Drink(int n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 2;
}
return n + Drink(n / 2);
}
int main(){
int n = 0;//n带代表的是金钱
printf("请问你要花费多少钱?\n");
scanf("%d", &n);
printf("%d元可以喝%d瓶汽水!!\n", n, Drink(n));
return 0;
}
当然也可以把递归改为循环实现
int Drink(int n) {
int res = 0;
while (n){
res += n;
n /= 2;
if (n == 0) {
break;
}
if (n == 1) {
res += 2;
break;
}
}
return res;
}