基础题,二分查找即可。
#include <iostream>
#include <iomanip>
using namespace std;
const int MAXN = 10005;
const double eps = 1e-6;
double len[MAXN]; //每段绳子的长度
int N, K;
//判断是否能得到K段长为x的绳子
bool check(double x)
{
int total = 0;
for (int i = 0; i < N; i++)
total += (int)(len[i] / x);
if (total >= K)
return true;
else
return false;
}
int main()
{
while (cin >> N >> K)
{
if (N == 0 && K == 0)
break;
for (int i = 0; i < N; i++)
{
cin >> len[i];
}
double l = 0, r = 100000, mid;
while (r - l > eps) //二分查找
{
mid = (r + l) / 2;
if (check(mid))
l = mid;
else
r = mid;
}
cout << fixed << setprecision(2) << l << endl;
}
return 0;
}
继续加油。