c++,有 N 个数,把这些数分成k 个数,让这些数的最大值最小

皮皮有 N 根长为 Li​ 的金条,现在想把这些金条切割成 k 个小段,每段必须为整数长度,我们想要把得到的 k 个小段金条放入定制的 k 个盒子中(每个盒子中最多只能有一个金条)。盒子是批量定制的长度相同的盒子。我们应该定制最少多长的盒子才能把所有小段金条都装下?


#include <iostream>
using namespace std;

int main()
{
    int N, k, length = 1;
    cin >> N;
    int* a = new int[N];
    for (int i = 0; i < N; ++i)
        cin >> a[i];
    cin >> k;
    while (1)
    {
        int temp = 0;
        for (int i = 0; i < N; ++i)
        {
            if (a[i] % length == 0)
                temp += (a[i] / length);
            else
                temp += (a[i] / length + 1);
        }
        if (temp <= k)
        {
            cout << length;
            break;
        }
        else
            ++length;
    }
    delete[] a;
    return 0;
}

求求啦给给代码吧