精度

#include<stdio.h>
#include<algorithm>
#include<cmath>
#pragma warning(disable:4996)
#define maxn 10000+23
#define PI acos(-1.0)
using namespace std;
int n, f;
int a[maxn];
int check(double m)
{
int cout = f + 1;

for (int j = n - 1; j >= 0; j--)
{

cout -= (int)(a[j] * a[j] * PI / m);//如果写成(int)a[j]*a[j]*PI/m会出现四舍五入的情况,而需要的是向下取整
if (cout <= 0) return 1;
}
return 0;

}
int main()
{
printf("%lf", acos(-1.0));
scanf("%d%d",&n,&f);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a,a+n);
double l = 0, r = a[n - 1]*a[n-1]*PI+1;//加个一更好
double mid;
while (l +0.000001< r)
{
mid= (l + r) / 2;
if (check(mid)) l = mid;
else
r = mid;

}

printf("%.3lf",l);
getchar();
getchar();
return 0;
}

原文地址:https://www.cnblogs.com/zxzmnh/p/11612267.html