Pinball

题意:俩点,一个确定斜面,一个确定小球初始位置,然后小球静止下落,求在斜面上最多可以弹几次。

据物理上学的类平抛运动可以推出每次弹出的相对斜面的位移之比为1:2:3:4.......,所以只需要算出第一次的位移就行,由于没有能量损失,所以由动能定理可得第一次位移s=8Hsinθ,之后以此类推就行

#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
#define gg 9.8

int main(){
    int f,sum;
    double a,b,x,y;
    double jiaodu, jvli, shijian ,time,h;
    scanf("%d",&f);
    while(f--){
       
        scanf("%lf %lf %lf %lf",&a,&b,&x,&y);
        jiaodu=atan(b/a);
        h=cos(jiaodu)*(y+b/a*x);
        jvli=-x/cos(jiaodu)+(y+b/a*x)*sin(jiaodu);
        
        //cout << h <<"  " << jvli  << ' ' << jiaodu <<endl; 
   
        shijian=sqrt(2*jvli/gg/sin(jiaodu));
        time=sqrt(2*h/gg/cos(jiaodu));

        //cout<< shijan << '  ' << time <<endl;
        
        sum=(shijian-time)/(2*time)+1;
        cout << sum << endl;
    }
    
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/dong_qian/article/details/81559299