【每日一题】---------裁木料

按键精灵小Q
按键精灵官方账号
2022-08-30 15:17:30

作者:神梦科技

 

给了一些木头。它由一个整数数组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 也是一个正整数;
结果应该是整数长度的小块,尽可能长;
请注意优化代码避免超时


题目难度:一般 

 

Import "SmAssert.dll"

 

Function 裁木料(数组, 等份)

    // 您的代码写在这里

End Function

 

 

SmAssert 裁木料(Array(232, 124, 456), 7) = 114

SmAssert 裁木料(Array(232, 124, 456), 20) = 38

SmAssert 裁木料(Array(232, 124, 456), 1) = 456

SmAssert 裁木料(Array(232, 124, 456), 2) = 232

SmAssert 裁木料(Array(232, 124, 456), 3) = 228

SmAssert 裁木料(Array(1, 1, 1), 4) = 0

SmAssert 裁木料(Array(1, 1, 1), 3) = 1

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

 

参考题解

Import "SmAssert.dll"

 

VBSBegin

    ' 求最大值

    Function Max(Arr)

        Dim i, result

        For i = 0 To UBound(Arr)

            If Arr(i) > result Then 

                result = Arr(i)

            End If

        Next

        Max = result

    End Function

VBSEnd 

Function 裁木料(数组, 等份)

    

    '【作者】:神梦无痕

    '【QQ】:1042207232

    '【Q群】:584781753

    

    Dim maxx, minn, m, num, i

    

    maxx = Eval(Join(数组, "+"))

    minn = Max(数组) \ 等份

    Do While (minn <= maxx)

        m = (minn + maxx) \ 2

        If m = 0 Then m = 0 : Exit Do

        num = 0

        For i = 0 To UBound(数组)

            num = num + (数组(i) \ m)

        Next

        If num >= 等份 Then 

            minn = m + 1

        Else 

            maxx = m - 1

            m = m - 1

        End If

    Loop

    裁木料 = m

End Function

 

 

SmAssert 裁木料(Array(232, 124, 456), 7) = 114 

SmAssert 裁木料(Array(232, 124, 456), 20) = 38

SmAssert 裁木料(Array(232, 124, 456), 1) = 456

SmAssert 裁木料(Array(232, 124, 456), 2) = 232

SmAssert 裁木料(Array(232, 124, 456), 3) = 228

SmAssert 裁木料(Array(1, 1, 1), 4) = 0

SmAssert 裁木料(Array(1, 1, 1), 3) = 1

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

 

' 按键精灵带不动下面的例子

// SmAssert 裁木料(Array(200000000, 2147483645, 2147483646, 2147483647), 4) = 1073741823

// SmAssert 裁木料(Array(2000000000, 2147483645, 2147483646, 2147483647), 4) = 2000000000

原文地址:http://bbs.anjian.com/showtopic-701234-1.aspx

...全文
153 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-非IT技术 发布问题, 以便更快地解决您的疑问

11

社区成员

发帖
与我相关
我的任务
社区描述
按键精灵交流阵地
其他 企业社区
社区管理员
  • 按键精灵小Q
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧