美文网首页
笔试-纸币找零算法

笔试-纸币找零算法

作者: XJ2017 | 来源:发表于2020-01-11 19:13 被阅读0次

最近朋友面试遇到一个有意思的算法题,记录一下

题目如下:
1、现有i 张十元纸币,j张五元纸币,k张两元纸币,购物后要支付n元(i,j,k,n为整数)。要求编写一个复杂度为O(1)的函数FindSolution(i,j,k,n)功能是计算出能否用现在手上拥有的纸币是否足够并能刚好拼凑齐 n元,而不需要找零。

#! /usr/bin/env python
# -*-coding: utf-8 -*-


def test():
    print('设置拥有面值10、5、2的张数:')
    ten, five, two = [int(i) for i in input().split(',')]

    print("请输入需要计算的总金额")

    # 循环输入总金额进行计算
    # 用户输入总金额
    amount = int(input())
    while amount > 0:
        calculation(ten, five, two, amount)
        amount = int(input())
    if amount <= 0:
        print('输入金额数不能小于或等于零')
        return


# 整体思路:
# 从最大到最小面值依次使用,当出现最大面值使用后出现余数为其余下面值处理不了时考虑少使用一个或多个纸币
# 1.面值2与5能共同处理的余数为:2、4、5、6、7、8、9、10、11、12、13到无群大
# 2.面值2能处理的余数为:2、4、6、8等偶数

# 当面值10求余为1、3时,需要少一个面值10,将余数变为11、13
# 当面值5求余为1、3等奇数时,需要少一个面值5,将余数变为6、8等偶数


def calculation(ten, five, two, amount):
    # 超出拥有总金额,提升钱不够
    total = ten * 10 + five * 5 + two * 2
    if amount > total:
        print('输入金额超出总金额 %d' % total)
        return

    # 计算需要面值10的张数
    tenUse = amount // 10
    tenUse = tenUse if (ten >= tenUse) else ten
    tempRemainder = amount - tenUse * 10
    if tenUse > 0:
        if tempRemainder == 1 or tempRemainder == 3:
            tenUse -= 1
            tempRemainder += 10

    # 计算需要面值5的张数
    fiveUse = tempRemainder // 5
    fiveUse = fiveUse if (five >= fiveUse) else five
    tempRemainder -= fiveUse * 5
    if fiveUse > 0:
        if tempRemainder % 2 != 0:
            fiveUse -= 1
            tempRemainder += 5

    # 计算需要面值2的张数
    twoUse = tempRemainder // 2
    twoUse = twoUse if (two >= twoUse) else two
    tempRemainder -= twoUse * 2

    # 通过余数为零来判断是否无需找零
    if tempRemainder == 0:
        print('无需找零,使用%2d张十元,%d张五元,%d张两元' % (tenUse, fiveUse, twoUse))
    else:
        print('!存在找零,拥有%2d张十元,%d张五元,%d张两元' % (ten, five, two))


if __name__ == "__main__":
    test()

运算结果


image.png

相关文章

  • 笔试-纸币找零算法

    最近朋友面试遇到一个有意思的算法题,记录一下 题目如下:1、现有i 张十元纸币,j张五元纸币,k张两元纸币,购物后...

  • 6.2

    1.00后们都不喜欢纸币了。经常会遇到00后要求找零不要纸币,找零被要求扫码找零。 手里拿着大人给的纸币,找零却不...

  • 一元纸币会消失吗?

    大家都见过,都用过一元纸币,坐公交,找零都是少不了的,但是空空听说了央行要逐渐取消一元纸币,这是为什么呢?空空带大...

  • 泰国之旅 2

    在自动购票机上,选择英文,然后根据提示,买去目的地的票,插入纸币,拿找零和票,跟国内地铁差不多的程序。 曼谷的地铁...

  • 贪婪算法

    钱币找零问题这个问题在我们的日常生活中就更加普遍了。假设1元、2元、5元、10元、20元、50元、100元的纸币分...

  • 支付宝:距中国无现金社会还有1708天!网友:早已身无分文

    无现金社会都用移动支付,扫一扫,点一点,购物就完成了,不用辨纸币的真假,不用找零,钱包都可以省了,年轻人表示:这就...

  • 支付宝如往常报无现金社会天数!网友评论亮了!

    无现金社会都用移动支付,扫一扫,点一点,购物就完成了,不用辨纸币的真假,不用找零,钱包都可以省了,年轻人表示:这就...

  • 读入一个数列和N值,返回按优先级排序的N个数 满足...Pyth

    拼多多2019.09.01秋招笔试 算法工程师

  • 关于Java岗校招的笔试和面试

    如果你正在开始准备校招,希望可以帮到你。 笔试 笔试准备 算法题是笔试中最重要的部分: 剑指offer,建议必刷。...

  • 和气生财

    刚才,有个七八十岁的奶奶买了12.9元的鸡蛋,她给了张20元的纸币让我找零,在我还未拿好零钱的时候, 她就叮嘱我:...

网友评论

      本文标题:笔试-纸币找零算法

      本文链接:https://www.haomeiwen.com/subject/uvdaoctx.html