• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[神梦] 【每日一题】裁木料 - 2022.07.21 [复制链接]

1#
题目描述

给了一些木头。它由一个整数数组woods (参数1)给出,每个元素是木头的长度。将它们切成小块,以保证您可以拥有等于或多于n (参数 2)具有相同长度的块(长度应该是整数)。你的任务是找出你能从这些树林中得到的最长长度是多少?返回小块的最大长度。

一个例子:
woods = [232, 124, 456], n = 7
我们拥有的木头长度分别是232,124,456,需要裁成7份同长度的木头,要求尽可能的长,结果应该是114,因为 232 可以裁成2段114长度的木头,剩余4(可以丢弃),124可以裁一段剩余10,456可以裁成4段无剩余。裁出来的数量是 2+1+4 = 7段,如果我们裁成115则最多只能裁出6段一样长的。

注意:
中的所有数字woods 都是正整数;
n 也是一个正整数;
结果应该是整数长度的小块,尽可能长;
请注意优化代码避免超时


题目难度:一般
题目来源:Wood Cut | Codewars
题目交流: 584781753
  1. Import "SmAssert.dll"

  2. Function 裁木料(数组, 等份)
  3.     // 您的代码写在这里
  4. End Function


  5. SmAssert 裁木料(Array(232, 124, 456), 7) = 114
  6. SmAssert 裁木料(Array(232, 124, 456), 20) = 38
  7. SmAssert 裁木料(Array(232, 124, 456), 1) = 456
  8. SmAssert 裁木料(Array(232, 124, 456), 2) = 232
  9. SmAssert 裁木料(Array(232, 124, 456), 3) = 228
  10. SmAssert 裁木料(Array(1, 1, 1), 4) = 0
  11. SmAssert 裁木料(Array(1, 1, 1), 3) = 1
  12. SmAssert 裁木料(Array(739,236,932,583,524,983,682,55,679,582,283,439,405,245,627,819,452,540,412,919,444,589,102,104,937,940,484,804,522,49,745,435,17,26,918,423,790,27,884,655,651,799,786,71,503,910,461,804,520,661,706,953,144,878,847,663,476,230,848,258,500,907,45,345,221,934,562,428,459,320,894,944,727,294,786,451,888,266,362,878,950,690,900,810,953,433,181,267,370,874), 45) = 582
复制代码

参考题解

  1. Import "SmAssert.dll"

  2. VBSBegin
  3.     ' 求最大值
  4.     Function Max(Arr)
  5.         Dim i, result
  6.         For i = 0 To UBound(Arr)
  7.             If Arr(i) > result Then
  8.                 result = Arr(i)
  9.             End If
  10.         Next
  11.         Max = result
  12.     End Function
  13. VBSEnd
  14. Function 裁木料(数组, 等份)
  15.     
  16.     '【作者】:神梦无痕
  17.     '【QQ】:1042207232
  18.     '【Q群】:584781753
  19.     
  20.     Dim maxx, minn, m, num, i
  21.     
  22.     maxx = Eval(Join(数组, "+"))
  23.     minn = Max(数组) \ 等份
  24.     Do While (minn <= maxx)
  25.         m = (minn + maxx) \ 2
  26.         If m = 0 Then m = 0 : Exit Do
  27.         num = 0
  28.         For i = 0 To UBound(数组)
  29.             num = num + (数组(i) \ m)
  30.         Next
  31.         If num >= 等份 Then
  32.             minn = m + 1
  33.         Else
  34.             maxx = m - 1
  35.             m = m - 1
  36.         End If
  37.     Loop
  38.     裁木料 = m
  39. End Function


  40. SmAssert 裁木料(Array(232, 124, 456), 7) = 114
  41. SmAssert 裁木料(Array(232, 124, 456), 20) = 38
  42. SmAssert 裁木料(Array(232, 124, 456), 1) = 456
  43. SmAssert 裁木料(Array(232, 124, 456), 2) = 232
  44. SmAssert 裁木料(Array(232, 124, 456), 3) = 228
  45. SmAssert 裁木料(Array(1, 1, 1), 4) = 0
  46. SmAssert 裁木料(Array(1, 1, 1), 3) = 1
  47. SmAssert 裁木料(Array(739,236,932,583,524,983,682,55,679,582,283,439,405,245,627,819,452,540,412,919,444,589,102,104,937,940,484,804,522,49,745,435,17,26,918,423,790,27,884,655,651,799,786,71,503,910,461,804,520,661,706,953,144,878,847,663,476,230,848,258,500,907,45,345,221,934,562,428,459,320,894,944,727,294,786,451,888,266,362,878,950,690,900,810,953,433,181,267,370,874), 45) = 582

  48. ' 按键精灵带不动下面的例子
  49. // SmAssert 裁木料(Array(200000000, 2147483645, 2147483646, 2147483647), 4) = 1073741823
  50. // SmAssert 裁木料(Array(2000000000, 2147483645, 2147483646, 2147483647), 4) = 2000000000
复制代码










插件下载

 
【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误

2#

学习

发新话题 回复该主题