能否详细讲讲这个的思路,为啥这样写

img

带数据进去,比如:
开始为13瓶,即N=13,在循环中,
第一轮:
总数sum要累加,sum = sum + n = 13
k为可换的空瓶数13,n为换到的瓶数13/2 = 6,
18行的k为换后的余数,k =1
下一轮:
sum = 13+6 = 19
k = 1 + 6 = 7
n = 7/2 = 3
k = 7%2 =1
第3轮:
sum = 19 + 3 = 22
k = 1 + 3 = 4
n = 4 /2 = 2
k =0
第4轮:
sum = 22+ 2 =24
k = 0 +2 = 2
n = 2/2 =1
k = 0
第5轮:
sum =24 +1 = 25
k = 0 + 1 = 1
n = 1/2 = 0.5
k = 1%2 = 1
第6轮:n <0 ,跳出循环。

第一个K=K+N是空瓶子数,N=K/2,就是可以换的可乐数,K%2就是有时候空瓶子是单数会剩一个瓶子下来,

n 代表目前可以换的可乐数,k代表手头的空瓶子,每次喝完可乐后,先看手头有多少瓶子,这个瓶子数是刚刚喝完的可乐和上次兑换时剩余的瓶子数之和,然后算下手头的瓶子可以换多少可乐,也就是n,然后看下是不是还剩下一个瓶子没能兑换。再进行下一个循环,如果有一个瓶子兑换不了的时候,那么下次喝完可乐算手头瓶子的时候记得加上就好。

第一个K=K+N是空瓶子数,N=K/2,就是可以换的可乐数,K%2就是有时候空瓶子是单数会剩一个瓶子下来,
比如有10瓶可乐,第一次循环时,SUM就等于10,空瓶子K等于10,可以换的可乐等于N就等于10/2=5,换后以后空瓶子K等于5%2=1。
第二次循环时,SUM 等于10+5,空瓶子K等于5+1,可以换的可乐等于N就等于6/2=3,换后以后空瓶子K等于6%2=0。
第三次循环时,SUM 等于15+3,空瓶子K等于3,可以换的可乐等于N就等于3/2=1,换后以后空瓶子K等于3%2=1。
第三次循环时,SUM 等于18+1,空瓶子K等于1,可以换的可乐等于N就等于1/2=0,一个瓶子毛都换不到了,N也等于0了,循环结束。

n是现有可乐数量,k是现有空瓶数量,sum是喝掉的可乐数量
每次的while循环,表示喝光n瓶可乐(sum = sum + n),得到n个空瓶,加上上一次循环剩余的空瓶(k=k+n ),空瓶兑换可乐(n=k/2),计算剩余的空瓶(k=k%2 )

举例:初始化n为3
第一次循环:喝了3瓶,sum=3,得到3个空瓶,k=3,用2个空瓶兑换1瓶可乐,n=1;还剩一个空瓶,k=1;
第二次循环:喝1瓶,sum=4,得到1个空瓶,加上上次剩的空瓶,k=2,用两个空瓶兑换1瓶可乐,n=1;没有空瓶,k=0;
第三次循环:喝1瓶,sum=5,得到1个空瓶,k=1,无法换可乐,n=0;
n=0循环结束

n要分奇数和偶数两种情况
可以这样理解为
先把全部可乐喝完,用全部空瓶去兑换
while循环里面
第一次循环:
sum=拥有的可乐数
k=用空瓶换的可乐数+奇数剩的一个拥有的可乐
n=用空瓶换的可乐数
k用来统计 如果输入的是奇数瓶的话剩下一瓶的情况。
然后循环每次用空瓶换来的可乐数当做我们一开始拥有的可乐数
sum求得总的可乐数