首页 > 其他 > 详细

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

时间:2015-11-02 21:23:08      阅读:360      评论:0      收藏:0      [点我收藏+]

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

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

饰的变量。

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

本文出自 “无名小卒” 博客,请务必保留此出处http://814193594.blog.51cto.com/10729329/1708918

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

原文:http://814193594.blog.51cto.com/10729329/1708918

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!