一台自动售货机只接收 1 元硬币、1 元纸币以及 5 元纸币。如果买一 个笔记本需要 6 元,有多少种付款方式_______68__________。

 

  • 分析:

这里一看,理清题意,我们很快可以知道这道题用“可重组合”来做。不过这里要考虑投放硬币的顺序问题(容易在这里出错)。比如先投放一个一元硬币,再投放一个一元纸币。两个交换顺序,是不一样的投放方式。

由于要考虑投放的顺序问题,我们需要在可重组合的基础上,进行全排列(因为考虑投放顺序),但是呢因为可重组合每个隔间内又不能有次序之分(比如先放一个1元硬币,再放一个1元硬币。交换次序,还是视为一种方式),所以需要去重,也就是用“限重排列”方法去除允许无序的部分。

  • 具体步骤:

总体思路是用枚举法+可重组合+去重排列

1.当5元纸币数量为1:

也就还剩下:6-5=1元没有分配:有如下两种方式:

  • 1 元硬币:0        1 元纸币:1     5元纸币:1
  • 1 元硬币:1        1 元纸币:0     5元纸币:1

再考虑次序2*P(2,2)=4种

2.当5元纸币数量为0:

也就还剩下:6-0=6元没有分配:用可重组合公式可知,有如下C(6+2-1,1)=7种方式:

  • 1 元硬币:0        1 元纸币:6     5元纸币:0

这种方式下,考虑次序问题,用去重公式:P(6,6)/P(6,6)=1

  • 1 元硬币:1        1 元纸币:5     5元纸币:0

这种方式下,考虑次序问题,用去重公式:P(6,6)/P(5,5)=6

  • 1 元硬币:2        1 元纸币:4     5元纸币:0

这种方式下,考虑次序问题,用去重公式:P(6,6)/(P(4,4)*P(2,2))=15

  • 1 元硬币:3        1 元纸币:3     5元纸币:0

这种方式下,考虑次序问题,用去重公式:P(6,6)/(P(3,3)*P(3,3))=20

  • 1 元硬币:4        1 元纸币:2     5元纸币:0

这种方式下,考虑次序问题,用去重公式:P(6,6)/(P(4,4)*P(2,2))=15

  • 1 元硬币:5        1 元纸币:1     5元纸币:0

这种方式下,考虑次序问题,用去重公式:P(6,6)/P(5,5)=6

  • 1 元硬币:6        1 元纸币:0     5元纸币:0

这种方式下,考虑次序问题,用去重公式P(6,6)/P(6,6)=1

 

(为什么我要把上面一种种情况枚举出来?因为每种情况需要去重,去重分母不同所以需要枚举出来所有情况)

所以该种方式下结果为1+6+15+20+15+6+1=64

总共有64+4=68种

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的Java程序实现自动售货机的功能: ```java import java.util.Scanner; public class VendingMachine { public static void main(String[] args) { Scanner input = new Scanner(System.in); int price = 15; // 单价为15角,即15分 int balance = 0; // 初始余额为0 while (true) { System.out.println("请选择您要购的饮料类型:"); System.out.println("1. 可乐"); System.out.println("2. 雪碧"); System.out.println("3. 红茶"); int choice = input.nextInt(); if (choice >= 1 && choice <= 3) { if (balance >= price) { System.out.println("您购的饮料是:" + getDrinkName(choice)); balance -= price; if (balance > 0) { System.out.println("找您" + balance + "分"); balance = 0; } } else { System.out.println("余额不足,请投入硬币:"); int coin = input.nextInt(); if (coin == 15 || coin == 25) { balance += coin; } else { System.out.println("只接受15角和2硬币,请重新投币:"); } } } else { System.out.println("选择无效,请重新选择:"); } } } private static String getDrinkName(int choice) { switch (choice) { case 1: return "可乐"; case 2: return "雪碧"; case 3: return "红茶"; default: return ""; } } } ``` 程序中使用了一个无限循环,不断让用户选择购的饮料类型,然后判断用户的余额是否足够购,如果足够则扣除余额并输出购信息,如果不足则让用户投币,只接受15角和2硬币,不接受其他硬币纸币。如果用户投入的是2硬币,则在送出饮料的同时还会退换5角硬币

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值