001_OJ题目通用知识点_简单_1573 小明爱喝牛奶

题目描述

小明喜欢喝瓶装牛奶,今日超市有优惠活动,牛奶5元1瓶,每2个瓶盖外加1元可以换1瓶,如果小明在不赊账不借别人瓶盖的情况下,想喝N瓶牛奶,至少要花多少元钱?

解答要求

时间限制:1000ms, 内存限制:256MB

输入

输入整数N(0<=N<=10^8),代表N瓶牛奶

输出

输出整数代表最少要花费的钱数。

样例

输入样例 1

2

输出样例 1

10

输入样例 2

3

输出样例 2

11

输入样例 3

5

输出样例 3

17

经验(C++)

1.题目中给出了参数范围,面对参数范围,要对10^9 这个数字敏感,在 0-10^9 之间的数,用int作为数据类型即可,对于超出的情况,应当选择long long数据类型,要注意,long int 也是32位的,必须使用long long 作为数据类型。当题目中数据范围明确在可能等于10^9的情况下,要注意在运算以及运算的临时结果中,其结果是否可能越界,是否需要使用64位的类型进行保存,或者是否需要将变量都转为double进行运算,在运算完毕时转换回来。

2.当选择用long long 作为数据类型后,如果在主函数之外另写函数,应当注意函数入参,不要惯性地使用int而导致传参错误,该类错误不容易自检,应当从源头注意写法或使用工具检查。

3.该题目的考核点为编程实现,除了简单的数学解题方法之外,应当同时掌握其他方法解答,如二分法,递归等手段。在练习时可是尝试用多种算法实现,在实际的考试中也许只有一种解法可以通过,应当扩展自己的解题思路,而不是在运用数学解法简单破解之后就放弃使用复杂算法去实现。

4.数学解法:在购买一瓶之后,每购买X - 1瓶即可喝到X瓶,最终需要购买1 + (N - 1) / X * (X - 1) + (N - ( N - 1)/ X * X - 1) 瓶,最终花费 5+ ((N - 1) / X ) * ((X - 1) * 5 + 1) + 5 * (N - ( N - 1 ) / X *X - 1)元。

5.二分法解题思路:购买瓶数M为变化数,求得全部换购完喝到的瓶数为K,通过二分法可以求得购买的瓶数,剩余的都是换购的,购买的5元一瓶,换购的1元一瓶,价格就比较好求了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值