喝汽水问题
来源:互联网 发布:淘宝客服班培训多少钱 编辑:程序博客网 时间:2024/04/30 01:14
问题描述:
1.某学院有m个学生参加南湖春游,休息时喝汽水。南湖商家公告如下:
(1) 买一瓶汽水定价1.40元,喝1瓶汽水(不带走)1元。
(2) 为节约资源,规定3个空瓶可换回1瓶汽水,或20个空瓶可换回7瓶汽水。
(3) 为方便顾客,可先借后还。例如:借1瓶汽水,还3个空瓶;或借7瓶汽水,还20个空瓶。
问:m个学生每人喝1瓶汽水(不带走),至少需要多少元?
编程实现,输入正整数m(2<m<10000),输出至少需多少元(精确到小数点后2位)。
问题分析:
这可以使用贪婪算法解决。
A.首先,如果人数为20人,买13瓶汽水,借7瓶,喝完后归还20个空瓶(可换7瓶,还给商家),两清。
此时的花费为: 13/20*1.40 = 0.91元
B.如果为3人,买2瓶,借1瓶,3个空瓶归还,两清。
此时花费为: 2/3 *1.40 = 0.93元
C.如果只有2或1人,每人喝1瓶,此时每人花1元。
D.注意到0.91 < 0.93 < 1,因此最省钱的算法为:
先将m个人分为 x = m / 20 个大组,每组买13瓶即可。
再将剩下的 t = m - x*20 人,分为 y = t/3 个小组,每组买2瓶即可。
剩下最后的1或两人,每人花1元喝1瓶。
最低花费为: (13*x+2*y)*1.40 +t (元)
程序实现:
- /*
- * 问题:喝汽水问题
- * 时间:2013/11/17
- * Blog:http://blog.csdn.net/u012027907
- */
- #include <stdio.h>
- void DrinkWater()
- {
- int m,t,x,y;
- double money;
- printf("请输入学生数:");
- scanf("%d",&m);
- x = m/20; //分x个大组,每组买13瓶,借7瓶
- t = m - 20*x; //剩下大组外的7人
- y = t / 3; //剩下的7人分成y个小组,每组买2瓶汽水,借1瓶
- t = m - 20*x - 3*y; //剩下大小组外的人,每人花1元喝1瓶
- money = (13*x + 2*y)*1.40+t;//计算花的钱
- printf("喝%d瓶汽水,至少需要:%.2f元。\n",m,money);
- }
- void main()
- {
- DrinkWater();
- }
运行截图:
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水问题
- 喝汽水
- 喝汽水
- 汽水瓶问题(能喝多少瓶汽水)
- 20块钱喝汽水数量最大化问题
- C语言:20元喝汽水问题
- Drools规则入门程序:喝汽水问题(^_^)
- 没有找到QtNetwork或者是无法打开QtNetwork 的解决方法
- 再来一种求大数阶乘的方法
- CSDN高校俱乐部全新改版,欢迎你的加入!
- KMP串匹配算法
- 在C++中如何将ActiveX控件所使用的BSTR数据转换成CHAR字符数组?
- 喝汽水问题
- 线索二叉树的实现
- 以前用c写的单片机通讯程序
- 使用winrar压缩分卷(csdn上传大资源使用)
- truncate和delete删除有外键约束的表
- C ++ 的 背 影-----Bjarne Stroustrup访华
- 经典算法之不定方程问题
- umeng随笔
- Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程