w我的代码是这样的:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int a,b;
double c[10010],mi;
while(~scanf("%d %d",&a,&b)){
int i,ma;
mi = 0x3f3f3f3f;
for(i=0;i<a;i++){
scanf("%lf",&c[i]);
if(mi > c[i]) mi = c[i];
}
while(ma<b){
ma = 0;
for(i=0;i<a;i++){
ma=ma+(int)(c[i]/mi);
}
mi=mi-0.1;
}
printf("%.1lf\n",mi+0.1);
}
return 0;
}
然后我做正确的同学的代码是这样的:
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("./test.txt", "r", stdin);
double a[10010];
int n, m;
int duan;
while (scanf("%d%d", &n, &m) != EOF)
{
int i;
double maxlen, sumlen = 0;
for (i = 0; i < n; i++)
{
scanf("%lf", &a[i]);
sumlen += a[i];
}
maxlen = sumlen / m;
maxlen = floor(maxlen*10)/10; //去尾法保留一位小数
do
{
duan = 0;
for (i = 0; i < n; i++)
{
duan += floor(a[i] / maxlen);
}
if(duan >= m) break; //重点:每次-0.1可能会越过 duan= m的时刻,所以是>=
else maxlen-=0.1;
} while (1);
printf("%.1lf\n",maxlen);
}
return 0;
}
我感觉真的没啥大差别,但我的提交就是WA,救救孩子吧,呜呜呜。