C程序设计学习--喝汽水

1.设想

某学院有m个学生参加南湖春游,休息时喝汽水。南湖商家公告:

(1)买1瓶汽水定价1.40元,喝1瓶汽水(瓶不带走) 1 元。

(2)为节约资源,规定3个空瓶可换回1瓶汽水,或20个空瓶可换回7瓶汽水。

(3)为方便顾客,可先借后还。例如借1瓶汽水还3个空瓶,或借7瓶汽水还20个空瓶。

问m个学生每人喝1瓶汽水(瓶不带走),至少需要多少元?

输入正整数m,输出至少需要多少元(精确到小数点后第2位)。

2.求解思路

注意到春游喝汽水无需带走空瓶,根据商家的规定作以下比较:

(1)如果人数为20人,买13瓶汽水,借7瓶汽水,饮完20瓶汽水后还20个空瓶(即相当

于换回7瓶汽水还给商家),两清。此时每人花费为: 

                                                13/20*1.40=0.91元

(2)如果人数为3人,买2瓶汽水,借1瓶汽水,饮完3瓶汽水后还了个空瓶(即相当于换

回1瓶汽水还给商家),两清。此时每人花费为:

                                                 2/3* 1.40=0.93元

(3)如果只有2人或1人,每人喝1瓶汽水(瓶不带走),此时每人花费1元。

(4)注意到0.91<0.93<1,因而有以下的最省钱算法:

1)把m人分为x=m/20个大组,每组20人。每组买13瓶汽水(借7瓶汽水),饮完后还20个空瓶,两清。

2)剩下t=m-x*20人,分为y=t/3个小组,每组3人。每组买2瓶汽水(借1瓶汽水),饮完后还3个空瓶,两清。

3)剩下t=m-x*20-y*3人,每人花1元喝1瓶。

该算法得所花费用最低为: 

                                               (13*x+2*y)*1.40+t元

3.程序设计

#include <stdio.h>
int main()
{
	long m, t, x, y;
	printf("请输入正整数m:");
	scanf("%ld", &m);
	x = m / 20;                 //分x个大组,每组买13瓶汽水,借7瓶
	t = m - 20 * x;             //剩下大组外的t人
	y = t / 3;                  //剩下t人分y个小组,每组买2瓶汽水,借1瓶
	t = m - 20 * x - 3 * y;     //剩下大小组外的t人,每人花1元喝1瓶
	printf("喝%ld瓶汽水,至少需要%.2f元,\n", m, (13 * x + 2 * y)*1.40 + t);
	return 0;
}

4.程序运行示例

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值