机试算法讲解: 第11题 贪心之猫鼠大战

/*  贪心算法
问题:M磅猫粮,N个房间,第i个房间放着J[i]的老鼠粮食,需要F[i]磅猫粮给猫来看守,如果给予猫粮:F[i]*a%,则可获得J[i]*a%的老鼠粮食
输入:
第一行:非负整数 M N,接下来又N行,每一行含有1个非负整数 J[i] F[i]
最后一组测试用例为:-1 -1
所有的整数 <= 1000
对每一行输出:
打印出单独的一行,一个经过计算的实数(保留3位小数),老鼠能获得的最大的粮食(应选择最不值钱的鼠粮食)

输入:
5(磅猫粮) 3(3行)
7 2
4 3
5 2

20(磅猫粮) 3(3行)
25(J[1],第1个房间放着25磅老鼠粮食) 18(需要给猫18磅猫粮)  18/25=0.72 
24 15                                                     15/24=5/8=0.625(先买它)   15*(24/15)=24
15 10                                                     10/15=2/3=0.66  (再买它)5*(15/10)=7.5  综合31.5
-1 -1(结束)
输出:
13.333
31.500

思路:最贪心思路,选择最不值钱的,能买到的鼠粮最多->鼠粮/猫粮最大的,通过 18元能买25斤食物,所以1斤需要18/25,后除以前,最大的即为价值最高的,1元能买25/18(越大越不值钱)
1元能买 24/15=1.6斤,选择前/后最大的先买

关键:
1 打印3位小数 printf("%.3d",x);
2 整型数做除法要乘以1.0,否则为整数,(1.0)*iMouseFood/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值