Description
给出扔球的高度,和初速度,求球最远可以被扔出多远?
Sample Input
2 0 1 1 2
Sample Output
0.10 0.99 根据扔的角度不同,球飞出的角度也不同,先推导公式,然后三分角度求出极值。
#include<bits/stdc++.h> using namespace std; const double u=3.14159265358979; const double esp=1e-8; double v,h,g=9.8; double f(double x){ return v*cos((x/180.0)*u)*(v*sin((x/180.0)*u)/g+sqrt((2.0*h*g+v*sin((x/180.0)*u)*v*sin((x/180.0)*u))/(g*g))); } int main(){ int n; double x,L,R,mid,maxn,midd; while(scanf("%d",&n)==1){ for(int i=0;i<n;i++){ L = 0;R = 90; mid = midd = maxn = 0; scanf("%lf %lf",&h,&v); while(R-L>esp){ mid=L+(R-L)/2; midd=mid+(R-mid)/2; if(f(mid)<f(midd)) L=mid+esp; else R=midd-esp; } printf("%.2lf\n",f(L)); } } return 0; }
时间: 2024-10-28 03:52:41