您的位置:首页 > 编程语言 > C语言/C++

每瓶汽水一元,两个空瓶可以置换一瓶汽水,现有N元,最多能喝多少瓶?

2015-11-02 18:43 501 查看
--------------------------------------------------------------------------------

这是一个很容易出错的题;假如有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,本程序不做此考虑。
[b]--------------------------------------------------------------------------------[/b]

[b]C语言源码为:[/b]
# 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修
饰的变量。
------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言