资讯专栏INFORMATION COLUMN

100块钱换零钱,最多有多少种方式的 JavaScript 版本实现

xeblog / 3413人阅读

摘要:原文链接欢迎现在有块钱人民币,将块钱换成零钱最小币值元,一共有多少方式总的不同方式的数目等于将现金数换成除第一种币值之外的所有其他硬币的不同方式数据,加上将现金数第一种币值换成所有种类的币值的不同方式,根据上面的说法来实现吧实现中的是中的

原文链接: 欢迎 Star

现在有100块钱人民币,将 100 块钱换成零钱(最小币值 1 元),一共有多少方式?

总的不同方式的数目等于:

将现金数 100 换成除第一种币值之外的所有其他硬币的不同方式数据, 加上

将现金数 (100 - 第一种币值) 换成所有种类的币值的不同方式

ok, 根据上面的说法来实现吧:

"use strict"

// 实现 lisp 中的 list
// car 是 list 中的第一个值
// cdr 是 list 中的剩下的值的集合
const list = (...args) => args
  ,car = (list) => list[0]
  ,cdr = (list) => list.slice(1)

// 换零钱的方式
// 如果换 0 元钱,就算是有一种换钱方式
// 如果换的钱小于 0, 那么就算有零种换钱方式
// 如果币值的长度为 0, 那么也算是有零种换钱方式
function count_change(amount, coin_values) {
  switch (true) {
    case (amount === 0):
      return 1
    case (amount < 0 || no_more(coin_values)):
      return 0
    default:
      return (
         count_change(amount, except_first_denomination(coin_values))
         +
         count_change(
           amount - first_denomination(coin_values),
           coin_values
         )
      )
  }
}

function no_more(coin_values) {
  return coin_values.length === 0
}

function first_denomination(coin_values) {
  return car(coin_values)
}

function except_first_denomination(coin_values) {
  return cdr(coin_values)
}

测试一下:

const cn_coins = list(100, 50, 20, 10, 5, 2, 1)

count_change(100, cn_coins) // ---> 4563

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91312.html

相关文章

  • 软件测试肖sir__005测试用例设计方法(1)

    摘要:需要结合其他测试用例设计的方法进行补充。比如边界值边界值在软件中边界值测试方法是发现错误能力最强的一种。其中,原因是表示输入条件,结果是对输入执行的一系列计算后得到的输出。与取值或,表示某状态不出现,则表示某状态出现。 ...

    gnehc 评论0 收藏0
  • 现金找零方式总数(sicp)

    问题:现有现金a,并且有n种面额的零钱,问,共有多少种找零方式。问题细化:现有现金1元,并且有50分,25分,10分,5分,1分五种面额,用这5种零钱组成1元,共有多少种方式? 如果把n种零钱按照某种顺序排列(如50分,25分,10分,5分,1分,不一定升序或降序,也可以乱序),那么问题可以转化为:现金a用除第一种零钱之外其他面额的找零方式数目加上现金a-d用所有面额的找零方式数目,其中d为第一...

    pf_miles 评论0 收藏0
  • 前端构建工具(1)-- 代码检查 --ESlint

    摘要:简介检查我们写的代码是否满足指定规则的静态代码检查工具。作用作为代码检查工具,其作用主要有以下几点统一代码风格规则,如缩进用几个空格是否用驼峰命名法来命名变量和函数名等。 1、简介: eslint检查我们写的 JavaScript 代码是否满足指定规则的静态代码检查工具。 ESHint 和 JSLint 也是静态代码检查工具,但伴随着发展,他们已经无法满足需求,于是ESlint 诞...

    wendux 评论0 收藏0
  • 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?

    摘要:以前想过一个类似问题,就是没有每个人最大最小的得钱数的限制,以前的问题可以很好用随机数解决。于是这个问题也被以前的思想带坑里了,把突破口完全放在了如何处理每个人的随机数上。在与面试交谈中,明显有些紧张。 以前想过一个类似问题,就是没有每个人最大、最小的得钱数的限制,以前的问题可以很好用随机数解决。 于是这个问题也被以前的思想带坑里了,把突破口完全放在了如何处理每个人的随机数上。 于是在...

    toddmark 评论0 收藏0
  • 比特币入门笔记

    摘要:也就是说,比特币是一个完全出于社区共识的货币。所谓全称为,它是比特币交易的基本单位。根据比特币的协议,一个区块的大小是而一笔交易大概是,因此一个区块大概可以包含笔交易。 诞生 比特币诞生于 2008 年,一个网名为中本聪的人,提出了一个设想: 创造一种不受政府或任何组织控制的货币 比特币的本质就是一串数字,没有任何资产支持(现行货币背后都是国家或银行提供资产支持)。也就是说,比特币是一...

    Loong_T 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<