Python 中的柠檬水找零

pythonserver side programmingprogramming更新于 2023/11/9 19:20:00

假设有一个柠檬水摊,每杯柠檬水售价 5 美元。现在顾客们排着队从商店购买,每次订购一杯。

每位顾客只能买一杯柠檬水,可以用 5 美元、10 美元或 20 美元的钞票支付。我们必须给每位顾客提供正确的找零,这样净交易就是顾客支付 5 美元。一开始,我们手头没有零钱。

我们必须检查我们是否可以给每位顾客提供正确的找零。

因此,如果输入为 [5,5,5,10,20],则输出将为 True,因为从前 3 位顾客那里,我们可以按顺序获得三张 5 美元的钞票。从第四位顾客那里,我们收了一张 10 美元的钞票,并返还了一张 5 美元的钞票。之后,从第五位顾客那里,我们给了一张 10 美元的钞票和一张 5 美元的钞票。由于所有顾客都得到了正确的 找零,我们输出 true。

为了解决这个问题,我们将遵循以下步骤 −

  • n5 := 0, n10 := 0, n20 := 0
  • 对于 bills 中的每个 i,执行
    • 如果 i 与 5 相同,则
      • n5 := n5 + 1
    • 否则,当 i 与 10 相同时,则
      • n10 := n10 + 1
    • 否则,n20 := n20 + 1
    • 如果 bills 的大小 > 0 且 n5 等于 0,则
      • 返回 False
    • 如果 i 等于 20 且 n10 > 0 且 n5 > 0,则
      • n10 := n10 - 1
      • n5 := n5 - 1
    • 否则,当 i 等于 20 且 n10 等于 0 且 n5 < 3,则
      • 返回 False
    • 否则,当 i 等于 20 且 n10 等于 0 且 n5 >= 3 时,则
      • n5 := n5 -3
    • 如果 i 等于 10 且 n5 > 0,则
      • n5 := n5 - 1
    • 否则,当 i 等于 10 且 n5 等于 0 时,则
      • 返回 False
  • 返回 True

让我们看看下面的实现以便更好地理解 −

示例

class Solution:
   def lemonadeChange(self, bills):
      n5 = 0
      n10 = 0
      n20 = 0
      for i in bills:
         if i == 5:
            n5 += 1
         elif i == 10:
            n10 += 1
         else:
            n20 += 1
         if len(bills) > 0 and n5 == 0:
            return(False)
         if i == 20 and n10 > 0 and n5 > 0:
            n10 -= 1
            n5 -= 1
         elif i == 20 and n10 == 0 and n5 < 3:
            return(False)
         elif i == 20 and n10 == 0 and n5 >= 3:
            n5 = n5 -3
         if i == 10 and n5 > 0:
            n5 -= 1
         elif i == 10 and n5 == 0:
            return (False)
      return(True)
ob = Solution()
print(ob.lemonadeChange([5,5,5,10,20]))

输入

[5,5,5,10,20]

输出

True

相关文章