智力题2元1瓶4个瓶盖换1瓶

智力题

啤酒2元1瓶,4个瓶盖换1瓶,2个空瓶换1瓶,

问10元钱可以喝几瓶


下面是百度知道txt998 的回答:
1.10元买5瓶啤酒,喝完后,有5个空瓶和5个盖;
2.4个空瓶换2瓶啤酒,4盖换1瓶啤酒,剩下1个空瓶和1个盖,喝完后,有4个空瓶和4个盖;
3.4个空瓶换2瓶啤酒,4盖换1瓶啤酒,喝完后,有3个空瓶和3个盖;
4.2个空瓶换1瓶啤酒,喝完后,有2个空瓶和4个盖;
5.2个空瓶换1瓶啤酒,4盖换1瓶啤酒,喝完后,有2个空瓶和2个盖;
6.2个空瓶换1瓶啤酒,喝完后,有1个空瓶和3个盖;
7.借1瓶啤酒,喝完后,有2个空瓶和4个盖;换2瓶啤酒,还1瓶,还剩1瓶
8.借1瓶啤酒,2瓶喝完后,有2个空瓶和2个盖;换1瓶啤酒还上,还剩2个盖;
9.借2瓶啤酒,喝完后,有2个空瓶和4个盖;换2瓶啤酒还上,不再剩下瓶和盖。
所以共有:5+3+3+1+2+2+1+1+2=20

重庆空调维修04 | 2016-12-25 09:55
拉吉,算的这么复杂,瓶盖值5毛,瓶子值1元,啤酒就只值五毛,10元直接和20瓶了
这个思维是如果能"吃干榨净"就直接得结果了

分析图:

我的代码中间换啤酒的有几处数量不一样,但是结果一样,如下:
/*智力题啤酒2元1瓶,4个瓶盖换1瓶,2个空瓶换1瓶,问10元钱可以喝几瓶*/
#include<stdio.h>

int ping, P, G;//整瓶,瓶子,瓶盖
int sum = 10, price = 2;
int ans = 0;

void jiejiu(int ping, int G, int P);

void main()
{
	ping = sum / price;
	ans += ping;
	G = ping;
	P = ping;
	ping = 0;//被分解出瓶子和瓶盖了

	for (; G >= 4 || P >= 2;)
	{
		ping = G / 4 + P / 2;
		ans += ping;
		G = G % 4 + ping;//每个整瓶有一个瓶盖和一个瓶子
		P = P % 2 + ping;
		ping = 0;//分解后
		//printf("%d\n", ans);
	}
	//吃干榨净,借酒!!
	jiejiu(ping, G, P);

	printf("%d\n",ans);
}

void jiejiu(int ping, int G, int P)
{
	if (G == 2 && P == 0) { ans += 2;   return; }//再无别的可能,借2瓶还2瓶再无瓶盖瓶子
	if (G == 3 || P == 1)//任意一种都有能力借一瓶还一瓶
	{
		ping = ping + 1;//借1整瓶
		ans += ping;//喝酒取瓶,喝完才能分解
		G = G + ping;
		P = P + ping;
		ping = G / 4 + P / 2;//兑换

		ping = ping - 1;//还1整瓶
		ans += ping;//结算还后的喝到的瓶中啤酒

		G = G % 4 + ping;
		P = P % 2 + ping;
		ping = 0;//分解后

		//printf("%d\n", ans);

		jiejiu(ping, G, P);
	}
	return ;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超自然祈祷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值