--------------------------------------------------------------------------------
这是一个很容易出错的题;假如有20元,一共能喝sum瓶汽水,每两个空瓶可以换一瓶汽水;第一次可以买20瓶,则sum=20,此时剩下20个空瓶;用这20十个空瓶可以换10瓶汽水,此时sum=20+10;则又有十个空瓶,可以换5瓶汽水,此时,sum=20+10+5;注意:此时5/2=2余下一个空瓶;记作count=1;此时sum=20+10+5=2;然后用这个两个空瓶又可以换一瓶,此时sum=20+10+5+2+1;当这一瓶喝完后,由于1/2=0;现在有的同学就说20元一共可以喝38瓶汽水。但你错了,之前还余了一个空瓶加上最后这个空瓶一共两个,可以再换一瓶,所以,最终结果是:sum=20+10+5+2+1+1=39瓶。另外,如果这最后两瓶喝完了再向老板借一个空瓶,然后又可以兑换一瓶,完了再将这个空瓶还给老板,此时sum=40,本程序不做此考虑。
--------------------------------------------------------------------------------
C语言源码为:
# include <stdio.h> # include <stdlib.h> int main() { int piece = 1; int money = 0; int sum = 0; int E_bottle = 0; int left = 0, ret = 0; printf("请输入金额:"); scanf("%d",&money); sum = money / piece; E_bottle = sum; while (E_bottle) { E_bottle = E_bottle / 2; sum += E_bottle; if (E_bottle == 1) { left++; //1/2时余留一个空瓶 } } E_bottle = money / piece; while (E_bottle) { ret = E_bottle % 2; E_bottle = E_bottle / 2; if (ret == 1) { left++; //5/2是余一个空瓶 } } sum += left / 2; printf("%d元最多可以喝:%d瓶汽水\n",money,sum); system("pause"); return 0; }
------------------------------------------------------------------------------------------
干货小知识:const修饰全局变量时,存储在只读区(代码段区),不能通过指针修改其值,const修饰
局部变量时,存储在栈区,可以通过指针修改其值,VS下会报出警告,一般情况下,我们不修改const修
饰的变量。
------------------------------------------------------------------------------------------