看到大家好像都写了这道题的题解,那我也来写一份。。。
首先,有这么一个定理:
在水平地面上,斜抛一个球,不考虑空气阻力的情况下,45°投掷,能投掷得最远。若不是水平地面,则视地面坡度,其最优角度也不一样。
定理证明,可以设个落地点距离函数,角度为变量,初速度等为常量,求个导数就能得到最优角度了。这里就不证明了。(没错,就是因为我懒得写)
然后,可以得到以下式子:
速度与能量的关系:v = sqrt(2*E/m)
45°抛射角时,水平速度:v_v = sqrt(0.5)*v = sqrt(E/m)
45°抛射角时,竖直速度:v_h = sqrt(0.5)*v = sqrt(E/m)
45°抛射角时,球在空中运动的时间: t = △v_h/g = 2*v_h/g = 2*sqrt(E/m)/g
落地点的距离:s = v_v*t = 2*E/(m*g)
然后考虑能量损失,每次损失p%,也就是说
s[0]=2*E/(m*g)
s[i]=s[i-1]*(1-0.01*p)
求s[k]的和,即比值小于1的等比数列求和,直接套用等比数列求和公式。
sum = (1-(1-0.01*p)^∞)/(1-(1-0.01*p))*s[0] = s[0]/(0.01*p) = 2*E/(0.01*p*m*g)
然后就弄好了。
#include <bits/stdc++.h>
using namespace std;
int main()
{
double w,p;
while(cin>>w>>p)
{
printf("%.3f\n",2*1000/(0.0001*p*w*9.8));
}
}