现有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 <=