zoukankan      html  css  js  c++  java
  • 弹性碰撞

    只有一个球时,这就是单纯的物理问题。

    多个球时,所有的球都是一样的,两个球相撞后互相交换速度,可以视为直接互相穿过继续运动。

    由于在碰撞时球的顺序是不会改变的,先落下的球始终在下面。 所以将计算出的每个球的高度进行排序就能知道每个球的最终位置。

    最后按照R=0的结果加上2R*i就是每个球的高度。

    #include<iostream>
    #include<math.h>
    #include<algorithm>
    #include<stdio.h>
    using namespace std;
    int N,H,R,T;
    const double g=10.0;
    double y[105];
    double calc(int T)
    {
        if(T<=0) return H;
        double t=sqrt(2*H/g);
        int k=(int)(T/t);
        if(k%2==0)
        {
            double d=T-k*t;
            return H-g*d*d/2;
        }
        else
        {
            double d=k*t+t-T;
            return H-g*d*d/2;
        }
    }
    int main()
    {
        int round;
        cin>>round;
        while(round--)
        {
            cin>>N>>H>>R>>T;
            for(int i=0; i<N; i++)
            {
                y[i]=calc(T-i);
            }
            sort(y,y+N);
            for(int i=0; i<N; i++)
            {
                printf("%.2f%c",y[i]+2*R*i/100.0,i+1==N?'
    ':' ');
            }
        }
        return 0;
    }
    poj3684
  • 相关阅读:
    20200807日报
    20200806日报
    《大道至简》读书感悟
    20200805日报
    20200804日报
    20200803日报
    20200802日报
    vue中mounted内如何调完异步方法再渲染
    小程序画布识别iPhone11
    np.meshgrid() 生成网格坐标函数
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/6501917.html
Copyright © 2011-2022 走看看