三种面额纸币正好付款的O(1)复杂度函数问题-python

该博客介绍了如何利用Python编写一个复杂度为O(1)的函数`find_solution`,该函数根据手中持有的十元、五元和两元纸币数量,判断是否能恰好支付指定金额,且无需找零。文章详细分析了不同情况下的解决方案,并给出了具体的代码实现。
摘要由CSDN通过智能技术生成

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

1、 如果可以,在屏幕输出一个方案并结束: (例子:“需要2张十元纸币,1张五元纸币,张两元纸币,刚好可凑齐27元”)
2. 如果不可以,在屏幕输出“不能刚好凑齐 n元”。

分析:
1.函数复杂度为O(1),此题目目前想到用if判断;
2.纸币面额:10,5,2,总金额n的个位为:0,2,4,5,6,7,8,9是可以支付的;
3.先将5元全部转换为10元:
a = 5j//10
3.1、条件1:n%2==0:
计算个位所需2元数量:m1 = n%10/2
其余2元/5元全部转换为10元:
t1 = (k-m1)2//10
接下来只需 n//10<=i +a+t1,则一定可以支付,进行条件细分:
1). i足够支付:
n//10<=i:
直接支付n//10张10元,0张5元,m1张2元;
2). 需要i+j:
n // 10 > i and (n - 10 * i) // 5 <=

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值