题目链接:点击打开链接
题目大意:略。
解题思路:因为E=1/2mv^2,所以v^2=2E/m
当v分解为垂直方向的vsinθ和水平方向的vcosθ,所以水平方向的v为vcosθ,t为vsinθ/g,抛到最高点时通过的路程为s = vt = vcosθ*vsinθ/g,落下来同样相同的距离,s = 2vsinθvcosθ/g
因为2sinθvcosθ=sin2θ,sin2θ的最大值为1,即2θ=90°,θ=45°的时候s取得最大值~
这样s = v^2/g
又因为v^2=2E/m,在代码中v^2为变量v2,所以v2 = 2 * 1000 * 100 / w,即E = 1000, m = w/100
每次将v2/g 即v2 / 9.8的结果累加到s中,可以得到s为最后求得的总距离,每一次while循环,都要将v2损失百分比p,直到v2足够小(这里取0.000001可以通过所有测试用例,如果是0.00001会有一个测试点答案错误)的时候退出循环~
AC 代码
usingnamespacestd; typedeflonglongll; intmain() { doublew,p,v2,s=0; scanf("%lf%lf",&w,&p); v2=2*1000*100/w; while(v2>0.000001) { s+=v2/9.8; v2*=1-p/100; } printf("%.3f\n",s); return0; }