题目描述

游游今年就要毕业了,和同学们在携程上定制了日本毕业旅行。愉快的一天行程结束后大家回到酒店房间,这时候同学们都很口渴,是石头剪刀布选出游游去楼下的自动贩卖机给大家买可乐。贩卖机只支持硬币支付,且收银都只支持10,5,100三种面额。一次购买行为只能出一瓶可乐,且每次购买后总是找零最小枚数的硬币。(例如投入100元,可乐30元,则找零50元一枚,10元两枚)

游游需要购买的可乐数是m,其中手头拥有的 10,50,100 面额硬币枚数分别是 a,b,c ,可乐的价格是x(x是10的倍数)。

如果游游优先使用大面额购买且钱是够的情况下,请计算出需要投入硬币次数?

输入描述

依次输入
需要可乐的数量为m
10元的张数为a
50元的张数为b
100元的张数为c
1瓶可乐的价格为x

输出描述

输出当前金额下需要投入硬币的次数

例如需要购买2瓶可乐,每瓶可乐250元,手里有100元3枚,50元4枚,10元1枚。

购买第1瓶投递100元3枚,找50元

购买第2瓶投递50元5枚

所有总共需要操作8次金额投递操作

样例输入

2

1

4

3

250

样例输出

8

package com.wenson.test;import java.util.Scanner;/*** @author Wenson_Luo* @date 2020年10月13日* @todo*/
public class Main {// static int m = 2;// static int a = 7;// 10硬币// static int b = 1;// 50硬币// static int c = 4;// 100硬币// static int x = 250;public static void main(String[] args) {int m, a, b, c, x;int c1, c2, rest, count;Scanner sc = new Scanner(System.in);m = sc.nextInt();a = sc.nextInt();b = sc.nextInt();c = sc.nextInt();x = sc.nextInt();if (a * 10 + b * 50 + c * 100 < m * x) {System.out.println("钱不够,输入无效!");}c1 = x / 100;// 满100c2 = x % 100;// 不足100的部分restrest = x;count = 0;for (int i = 0; i < m; i++) {if (c2 == 0) {// 1.价格x是100的倍数(200)if (c >= c1) {// 1.1 100硬币足够买一瓶,消耗c即可c -= c1;count += c1;continue;} else {// 1.2 100硬币不够付账,剩下的钱看50硬币,c全部投入rest = x - c * 100;// 剩余价格count += c;if (b >= rest / 50) {// 1.2.1 50硬币足够付账(x是100的倍数则肯定是50,10的倍数)b -= (rest / 50);count += rest / 50;} else {// 1.2.2 50硬币不够付账,b全部投入,剩下投arest = rest - b * 50;// 剩余价格count += b;a -= rest / 10;count += rest / 10;}}} else {// 2.价格x不是100的倍数// System.out.println("a="+a+",b="+b+",c="+c);if (c >= c1 + 1) {// 2.1 100硬币足够买一瓶,消耗c即可,而且有找零(220找零一个50三个10)c -= (c1 + 1);rest = 100 - c2;b += rest / 50;a += (50 - rest % 50) / 10;count += (c1 + 1);continue;} else {// 2.2 100硬币不够买一瓶,c全部投入,而且有找零(220找零一个50三个10)rest = x - c * 100;// 剩余价格count += c;if (rest % 50 > 0) {// 2.2.1 价格x不是50的倍数if (b >= rest / 50 + 1) {// 2.2.1.1 50硬币够用,消耗b,找零ab -= (rest / 50 + 1);a += (50 - rest % 50) / 10;// 找零count += (rest / 50 + 1);continue;} else {// 2.2.1.2 50硬币不够,b全部投入,剩下用arest = rest - b * 50;// 剩余价格count += b;a -= rest / 10;count += rest / 10;}} else {// 2.2.2 价格x是50的倍数,if (b >= rest / 50) {// 2.2.2.1 50硬币够用,消耗b,不找零b -= (rest / 50);count += (rest / 50);} else {// 2.2.2.2 50硬币不够用,b全部投入,剩下用arest = rest - b * 50;// 剩余价格count += b;a -= rest / 10;count += rest / 10;}}}}}System.out.println(count);}
}

思路

穷举出所有情况:

  • 1 价格x是100的倍数(200)

    • 1.1 100硬币足够买一瓶,消耗c即可
    • 1.2 100硬币不够付账,剩下的钱看50硬币,c全部投入
      • 1.2.1 50硬币足够付账(x是100的倍数则肯定是50,10的倍数)

      • 1.2.2 50硬币不够付账,b全部投入,剩下投a

  • 2 价格x不是100的倍数

    • 2.1 100硬币足够买一瓶,消耗c即可,而且有找零(220找零一个50三个10)

      • 2.2.1 价格x不是50的倍数

        • 2.2.1.1 50硬币够用,消耗b,找零a
        • 2.2.1.2 50硬币不够,b全部投入,剩下用a
    • 2.2 100硬币不够买一瓶,c全部投入,而且有找零

      • 2.2.2 价格x是50的倍数

        • 2.2.2.1 50硬币够用,消耗b,不找零
        • 2.2.2.2 50硬币不够用,b全部投入,剩下用a

携程2020笔试题——《买饮料》相关推荐

  1. Python求解啤酒问题(携程2016笔试题)

    问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升, 并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客 ...

  2. 妙用Python集合求解啤酒问题(携程2016笔试题)

    问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升,并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的 ...

  3. 多益网络2020笔试题

    多益网络2020笔试题 题型:选择题,填空题,问答题,一道编程题. 填空题 防火墙 1.1 定义:一种控制访问技术 1.2 特点:防火墙将内部的网络成为可信网络,外部网络成为不可行网络 1.3 防火墙 ...

  4. 携程Java面试题,疯狂java讲义第三版

    开头 我们面试的时候 ,经常会被问这种到问题:Spring中bean的循环依赖怎么解决? Spring中bean的加载过程? spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们, ...

  5. 携程SQL面试题忘大牛解答解决思路

    讨论地址:http://bbs.csdn.net/topics/380208742

  6. vivo校招2020笔试题及答案

    题目描述: 一行字符串,仅有 ( .) .0.组成,其中一对 ( ) 表示一个礼品盒,0表示奖品,输入的括号一定是成对出现的. 输出: 结果是要拆的最少礼品盒的数量. 示例1: 输入:(()(()(( ...

  7. 携程发布2020年财报:四季度营业利润率10% 疫情以来连续两季度盈利

    北京时间2021年3月4日, 携程集团(纳斯达克股票代码:TCOM)公布了截至2020年12月31日第四季度及全年的财务业绩. 在全球旅游业饱受疫情冲击的背景下,携程在2020年全年的业绩表现&quo ...

  8. 互联网日报 | 3月5日 星期五 | 抖音成为2020欧洲杯官方合作伙伴;携程GMV连续三年全球旅企第一;华为发布好望云服务...

    今日看点 ✦ 携程2020年GMV达3950亿元,连续3年稳居全球在线旅游行业第一 ✦ 趣头条2020年营收52.85亿元,首次实现季度盈利 ✦ 华为发布好望云服务:机器视觉战略再升级,使能行业数字化 ...

  9. 旅游O2O“三国杀”竞技:携程系「守」、飞猪「望」、美团「攻」

    (图片来源于网络) 文 | 易不二 来源 | 螳螂财经 随着我国经济社会发展.居民收入增加和消费升级,我国居民的旅游消费能力和旅游消费群体都在大幅度增长.据Analysys监测数据,2017年中国在线 ...

最新文章

  1. 时隔3年,华为又有人入选IEEE Fellow
  2. .net里鼠标选中的text数据怎么获取_怎么利用Excel设置当天生日提醒功能
  3. win7 'IIS APPPOOL\Classic .NET AppPool' 登录失败
  4. 服务器升级文件 不推送就无法打开吗,Win7升Windows10有获取通知,但是就不推送的解决方法...
  5. Python pandas中DataFrame逐行读取的方法(pandas.core.frame.DataFrame类型)
  6. php_curl.dll libssh2.dll 始终无法加载的原因 及解决办法
  7. LNMP安装步骤详细教程以及一键部署脚本
  8. 西瓜书+实战+吴恩达机器学习(二十)随机算法(拉斯维加斯方法、蒙特卡罗方法)
  9. linux命令中info,Linux中zipinfo命令起什么作用呢?
  10. python公共变量声明_Python变量声明
  11. sum() over (order by )
  12. 狂神说Java--Java学习笔记(合集)
  13. 如何在JavaScript中用SpreadJS导入/导出Excel文件
  14. Limesdr软件无线电架构的理解
  15. 视频下载工具you-get(哔哩哔哩巨好用)
  16. 视频快搜新片热剧,百度手机浏览器上都有啊
  17. 个人电子邮箱格式大全,邮箱的正确格式是什么?
  18. Linux python + selenium 以 kiosk模式打开Chrome浏览器 并 支持下载文件时询问下载路径
  19. 推荐 25 个优雅的 jQuery Tooltip 插件
  20. win10系统 开启蓝牙服务器,win10系统蓝牙在哪开启?

热门文章

  1. 谷歌浏览器开发调试小技巧
  2. 辽宁高考成绩查询电话2021,辽宁高考成绩查询电话号码多少,2021年辽宁高考查分电话...
  3. c语言中有裁剪字符串的函数吗,C语言中的字符串截取函数
  4. Basler ace 相机软件设置、 硬件连接、软件触发,程序硬件触发全套详细资料
  5. 数据库E-R图与关系模式图
  6. 索尼xzp升级android p,索尼XZP国行版升级安卓8.0 相机功能优化
  7. 模拟电子技术实验,模拟电路实验课程装置
  8. 仿思否可伸缩input搜索框
  9. react页面渲染之前_react 渲染顺序
  10. 北京中医药大学22春《中国近现代史纲要》平时作业1【辅导答案】