Shot(数学+物理题,不简单)
分析:原题中“假设把球投到篮框的高度就算球进”一句有误导成分。。。实际上是要到了篮筐的位置才算进球,不只是高度的问题,还有水平距离的问题。假设篮球初速与水平方向夹角为X,时间 t 对应的篮球高度为H,由高中运动学知识不难列出两个方程:H = h + (v*sinX)*t - 0.5*g*t*t ······ ①; t = l / (v*cosX)········②,另外由三角函数知识得:cosX*cosX = cosX*cosX / (sinX*sinX + cosX*cosX) = 1 / (tanX*tanX + 1)·······③;②代入①再根据③式化简得到:
H = -(0.5*g*l*l / (v*v))tanX*tanX + l*tanX + h - 0.5*g*l*l / (v*v);这是关于tanX的二次函数,根据初中max = (4*a*c-b*b) / (4*a)的知识就能求出H(max) = 0.5*v*v / g - 0.5*g*l*l / (v*v) + h。这就是篮筐的最高高度。
//Memory: 1180 KB Time: 0 MS //Language: G++ Result: Accepted #include <iostream> #include <cmath> #include <cstdio> #define g 9.8 using namespace std; int main() { double h,l,v, max; while(scanf("%lf%lf%lf",&h, &l, &v) && h && l && v) { max = 0.5*v*v/g-0.5*g*l*l/(v*v) + h; printf("%.2lf\n",max); } return 0; }