int Num2(int num){
int flag = num;//flag代表空瓶数,第一次有num个空瓶
while (flag > 1){//终止条件,只剩一个空瓶,不能再换了
num = num + flag / 2;//累加
flag = flag / 2 + flag % 2;//记录下一次空瓶的个数,包括奇数的情况
}
return num;
}
递归
int Num(int num){
static int more = 0;
if (more == 1 && num == 1){//终止条件是more 和 num 都为 1
return 1;
}
if (more == 1){//如果是奇数 ,上次有一个空瓶没有兑换, 则需要在下一步减 1,不然会多加一瓶水
num = num - 1;
}
more = num % 2;//如果此次的水是奇数,则在下一个循环 num 需要减掉 1
return num + Num(num / 2 + more);//加的 more 是没有兑换的空瓶 如果为 1,则需要在下一层减 1
}
int main() {
int ret = Num(20);
//int ret = Num2(20);
printf("%d\n", ret);
return 0;
}