鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

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

[复制链接]
发表于 2020-2-21 21:15:30 From FishC Mobile | 显示全部楼层
先把列表中最小的值,赋给最终结果;然后将列表中各个值,对刚才结果加1,分别求地板除后再求和,如果求和值大于等于列表的长度,就将其值赋给最终结果,否则舍弃;重复第二步直到列表中最大值。
缺点是求出来的结果是整数米,如果是小数呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 23:24:29 | 显示全部楼层
本帖最后由 kinkon 于 2020-2-21 23:31 编辑

想了好久才理清思路,感觉有些难度
  1. def f336(m,woods):
  2.     woods = sorted(woods)
  3.     if len(woods) <= 1:
  4.         return woods[0]//m        
  5.     else:
  6.         woods = woods[-m:]
  7.         n, c = woods[-1]//m, 0
  8.         while True:
  9.             n += 1            
  10.             for wood in woods:
  11.                 c += wood//n
  12.             if c < m:
  13.                 return n - 1
  14.             c = 0
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-2-22 00:03:00 | 显示全部楼层
本帖最后由 牧木学编程 于 2020-2-22 00:13 编辑
  1. import math
  2. def judge(height,m,woods):
  3.     #判断高度是否符合要求
  4.     sum = 0
  5.     for each in woods:
  6.         sum += math.floor(each / height) #不用//的原因是因为有bug例如5 //(5/3)=2.0
  7.     if sum >= m:
  8.         return True
  9.     else:
  10.         False

  11. def func(m,woods):
  12.     woods.sort()
  13.     #先找最大的整数
  14.     i = woods[-1] // m
  15.     while True:
  16.         if judge(i,m,woods):
  17.             i += 1
  18.             continue
  19.         else:
  20.             i -= 1
  21.             break
  22.     #答案在i和i+1之间,最长的那根木头分割的木头最多
  23.     max = woods[-1]//i
  24.     while True:
  25.         temp = woods[-1] / max
  26.         if judge(temp,m,woods) and temp > i:
  27.             return temp
  28.         else:
  29.             max += 1
  30.             if max > m:
  31.                 return i
  32.         
  33. a = func(3,[2,3,4])
  34. print(a)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 00:48:06 | 显示全部楼层
暴力破解,暂未想到更便捷的方案。
  1. def solve(m:'int > 0',woods:'list of int')->int:
  2.     if m <= 0:return 'inf'
  3.     woods.sort(reverse=True)
  4.     for h in range(woods[0],0,-1):
  5.         n = 0
  6.         for each in woods:
  7.             n += each // h
  8.             if n >= m:return h
  9.     return 0
  10. if __name__ == '__main__':
  11.     print('示例1 输出:',solve(3,[2,3,4]))
  12.     print('示例2 输出:',solve(3,[2,10]))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 20:41:22 | 显示全部楼层
fan1993423 发表于 2020-2-20 22:15
这下看还有没有问题

解答错误

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

使用道具 举报

 楼主| 发表于 2020-2-22 20:50:24 | 显示全部楼层
ruokang 发表于 2020-2-20 22:30
def f336(woods, m):
    max_hight = sum(woods) // m
    hight = max_hight

输入大数据超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 20:53:19 | 显示全部楼层
546623863 发表于 2020-2-20 22:40
目前么得其他思路,只有这个比较蠢的

输入大数据超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 20:54:58 | 显示全部楼层
拉了盏灯 发表于 2020-2-20 22:54
如果把木头劈成10/3还能高点,

输入大数据超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 20:55:17 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2020-2-22 20:56:00 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-22 21:16:16 | 显示全部楼层
zltzlt 发表于 2020-2-22 20:41
解答错误

输入:m = 5, woods = [1, 1, 1, 1, 1, 2, 2, 2]

你题目说的是不同长度的木头哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 21:32:55 | 显示全部楼层
本帖最后由 546623863 于 2020-2-22 21:37 编辑
zltzlt 发表于 2020-2-22 20:53
输入大数据超时

  1. def fun336(m : int, woods : list):
  2.     woods.sort(reverse = True)
  3.     begin = woods[0]//3
  4.     if(begin < 1):
  5.         begin = 1
  6.     Max = begin
  7.     for i in range(begin,woods[0]+1):
  8.         num = 0
  9.         for each in woods:
  10.             if(each >= i):
  11.                 num += (each // i)
  12.                 if(num >= m):
  13.                     Max = i
  14.                     break
  15.             else:
  16.                 return Max
  17.     return Max
复制代码

缩小了一下范围,应该会快一点吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 22:27:22 | 显示全部楼层
zltzlt 发表于 2020-2-22 20:41
解答错误

输入:m = 5, woods = [1, 1, 1, 1, 1, 2, 2, 2]

请问是m大还是woods大?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 22:51:04 | 显示全部楼层
酱紫可能不会超时了吧
  1. def p336(m,woods):
  2.     woods = sorted(woods)
  3.     if len(woods) <= 1:
  4.         return woods[0]//m        
  5.     else:
  6.         woods = woods[-m:]
  7.         n = woods[-1]//m
  8.         nwoods = [wood for wood in woods if n < wood]
  9.         num = sum(nwoods)//m
  10.         c = 0
  11.         while True:            
  12.             for wood in nwoods:
  13.                 c += wood//num
  14.             if c >= m:  
  15.                 return num
  16.             num -= 1
  17.             c = 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 08:59:15 | 显示全部楼层

有没有人试试我的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 12:07:04 | 显示全部楼层
  1. def fun336(m,woods):
  2.     woods = sorted(woods)[::-1]
  3.     for i in range(max(woods)+1)[::-1]:
  4.         count = 0
  5.         for j in woods:
  6.             count += j//i
  7.             if count >= m:
  8.                 return i
  9.             if j < i:
  10.                 break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-23 19:45:30 | 显示全部楼层
fan1993423 发表于 2020-2-22 21:16
你题目说的是不同长度的木头哈

我意思是不是全部都相同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 22:55:42 | 显示全部楼层
zltzlt 发表于 2020-2-23 19:45
我意思是不是全部都相同

那你这个意思就表述不清了,不同的话我就认为是不同的长度,这个应该叫不完全相同
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 10:11:41 | 显示全部楼层
题主怎么不给试了?我答案当天给的,就测到我那里,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-25 15:15:11 | 显示全部楼层
TJBEST 发表于 2020-2-25 10:11
题主怎么不给试了?我答案当天给的,就测到我那里,

拖了好几天了今天测完
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 07:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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