📄 狐长.txt
字号:
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
/*
#define NMAX 5000
#define NUM 2000
#define MIN 0.000000001
#define PI 3.1415926535897932324626
double f[NMAX];
void init(int num)
{
int i;
double tt;
for(i=0;i<=num;i++)
{
tt=((double)i/(double)num)*PI/2;
f[i]=sin(tt);
}
}
double cal(double wide,double high,int num)
{
double len=0,tt;
int i;
for(i=1;i<=num;i++)
{
tt=(wide/(double)num)*(wide/(double)num)+(f[i]-f[i-1])*high*(f[i]-f[i-1])*high;
len+=sqrt(tt);
}
return len;
}
double solve(double al,double alx)
{
double mid,high,low,temp;
high=al/2;
low=0;
mid=(high+low)/2;
while(high-low>MIN)
{
temp=2*cal(alx/2,mid,NUM);
if(temp<al) low=mid;
else if(temp>al) high=mid;
else break;
mid=(low+high)/2;
}
return mid;
}
int main()
{
double a,b,lx;//lx原长
init(NUM);
scanf("%lf %lf %lf",&lx,&a,&b);
while(!(a==-1 && b==-1 && lx==-1))
{
printf("%.3lf\n",solve(lx*(1+a*b),lx));
scanf("%lf %lf %lf",&lx,&a,&b);
}
return 0;
}
*/
#define FLT_EPSILON 1e-12
int main()
{
double lp,n,c,l,r,rp;
while(scanf("%lf %lf",&lp,&l)!=EOF)
{
// lp = (1 + n * c) * l;
r = lp * lp * 0.25 / sqrt(lp * lp - l * l);
if(lp==l) printf("0.000\n");
else{
do
{
double temp = lp / (2 * r);
rp = r;
r += r * (l - 2 * r * sin(temp)) / (l - lp * cos(temp));
}
while(fabs(r - rp) > r * FLT_EPSILON);
printf("%.3lf\n", r - sqrt(r * r - l * l * 0.25));
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -