鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 328

[复制链接]
发表于 2020-2-10 12:49:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 fan1993423 于 2020-2-11 16:34 编辑
  1. def fun328(lst):
  2.     bill_dict={5:0,10:0}
  3.     for i in lst:
  4.         if i==5:
  5.             bill_dict[i]+=1
  6.         elif i==10:
  7.             bill_dict[i]+=1
  8.             bill_dict[5]-=1
  9.             if bill_dict[5]<0:
  10.                 return False
  11.         else:
  12.             bill_dict[10]-=1
  13.             bill_dict[5]-=1
  14.             if bill_dict[10]<0 or bill_dict[5]<0:
  15.                 bill_dict[10]+=1
  16.                 bill_dict[5]-=2
  17.                 if bill_dict[5]<0:return False
  18.     return True
复制代码

无脑解的,因为只有5,10,20这几种面值,如果面值多了,应该不能无脑解

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 12:51:00 | 显示全部楼层
比方说有5,10,15,20,25,30,35...100这种,难度陡然上升
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 12:51:09 | 显示全部楼层
  1. def fun328(bills):

  2.     count1 = 0  # 用于计算5元可供找零的次数
  3.     count2 = 0  # 用于计算10元可供找零的次数

  4.     for i in bills:
  5.         if i == 5:
  6.             count1 += 1
  7.         if i == 10:
  8.             if count1 < 1:
  9.                 return False
  10.             count1 -= 1
  11.             count2 += 1
  12.         if i == 20:
  13.             if count2 > 0 and count1 > 0:  # 如果有10元和5元的,先用10元和5元的找零
  14.                 count2 -= 1
  15.                 count1 -= 1
  16.             elif count2 == 0 and count1 > 0:  # 没有10元的,只能用5元的找零
  17.                 if count1 < 3:
  18.                     return False
  19.                 count1 -= 3
  20.             else:
  21.                 return False
  22.     return True
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 16:06:48 | 显示全部楼层
William4869 发表于 2020-2-9 22:41
无脑解法,,反正情况很少

196 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 16:11:05 | 显示全部楼层
TJBEST 发表于 2020-2-9 22:58
算了,今日事今日毕吧 我刚看错题了 以为 钱有很多种了 原来才3钟钱啊 如果 超过 三种 就得递归了

168 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 16:13:05 | 显示全部楼层
阴阳神万物主 发表于 2020-2-9 23:14
按照楼主的描述,好像不涉及有其他商贩可以进行零钱交易的渠道,那么我就苦恼了,比较纠结。
比如:这种情 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 16:13:54 | 显示全部楼层
546623863 发表于 2020-2-9 23:48
话说这玩意有其他解法吗

164 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 16:15:09 | 显示全部楼层
yexing 发表于 2020-2-10 00:40
试了试用列表来储存数据,写的时候思路不是很清晰,可能存在未发现的 bug :


解答错误

输入:[5, 5, 5, 5, 20, 20, 5, 5, 20, 5]
输出:True
预期结果:False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:58:45 | 显示全部楼层
  1. # coding=gbk
  2. have = []
  3. def zhaoqian(t): # 需要找t元
  4.     if t == 0:
  5.         return True
  6.     low_have = [i for i in have if i <= t] # 把不大于t的筛选出来
  7.     low_have.sort(reverse=True)
  8.     for i in low_have:
  9.         have.remove(i)
  10.         if not zhaoqian(t-i):
  11.             have.append(i)
  12.         else:
  13.             return True
  14.     return False
  15. def fun(bill):
  16.     for i in bill:
  17.         if i == 5:
  18.             have.append(5)
  19.         elif i % 5 != 0: # 不是5的整数倍一定不可以!
  20.             return False
  21.         else:
  22.             have.append(i) # 把钱收下
  23.             if not zhaoqian(i-5): # 开始暴力求解
  24.                 return False
  25.     return True
复制代码

相当暴力的解法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 17:57:50 | 显示全部楼层
  1. def solve_326(bills:list):
  2.     i = 0
  3.     x = 0
  4.     y = len(bills)
  5.     while True:
  6.         if x == y:
  7.             return True
  8.         if bills[i] - 5 == 0:
  9.             i += 1
  10.             x += 1
  11.             continue
  12.         else:
  13.             x += 1
  14.             each, num = bills[i] - 5, 0
  15.             ls = bills[:i]
  16.             ls.sort()
  17.             for j in range(len(ls)-1, -1, -1):
  18.                 if ls[j] <= each:
  19.                     each -= ls[j]
  20.                     bills.remove(ls[j])
  21.                     num += 1
  22.                     if each == 0:
  23.                         break
  24.             if each != 0:
  25.                 return False
  26.             else:
  27.                 i -= (num-1)
  28. print(solve_326([5, 5, 5, 5, 20, 20, 5, 5, 20, 5]))
复制代码

写的太复杂了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 18:47:45 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 18:48:08 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 18:48:30 | 显示全部楼层
fan1993423 发表于 2020-2-10 12:49
无脑解的,因为只有5,10,20这几种面值,如果面值多了,应该不能无脑解

64 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 18:48:53 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 19:03:01 | 显示全部楼层

我是不是最快的?另327题麻烦在测一下吧。我把走不通的设置成0了,现在改了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-11 19:03:41 | 显示全部楼层
fan1993423 发表于 2020-2-11 19:03
我是不是最快的?另327题麻烦在测一下吧。我把走不通的设置成0了,现在改了

收到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 19:09:25 | 显示全部楼层
mark
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 20:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表