练习代码:
#include<iostream>
using namespace std;
#define MAXN (1000+10)
int n;//衣服数
int l, r, mid;//左右中值
int k;//烘干机1分钟减少的水价
int a[MAXN];//每件衣服的水量
bool check(int t) {
int sumT=0;
for (int i = 0; i < n; i++)
{
if (a[i] > t)
sumT += ((a[i] - t-1) / (k - 1)) + 1;//注意a/k向上取整的写法是(a-1)/k+1
if (sumT > t) return false;
}
return true;
}
int main() {
l = 0;
r = 0;
cout << "输入衣服数:";
cin >> n;
cout << "输入每件衣服的水量:";
for (int i = 0; i < n; i++)
{
cin >> a[i];
if (a[i] > r) r = a[i];
}
cout << "输入烘干机每分钟烘干的水量:";
cin >> k;
while (l <= r) {//二分法寻找最短时间
mid = (l + r) / 2;
if (check(mid)) r = mid - 1;//注意左\右边界赋值的写法
else l = mid + 1;
}
cout << "最短烘干时间为:"<<l;
return 0;
}