--------------------------------------------------------------------------------

     这是一个很容易出错的题;假如有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修

饰的变量。

------------------------------------------------------------------------------------------