15届蓝桥杯c/c++b组试题B:小球反弹

打印 上一主题 下一主题

主题 1829|帖子 1829|积分 5487

标题概述:


思绪讲解:

        在知道速度的前提下,我们可以求解时间t来盘算旅程s=v*t。那么时间怎么求?
        因速度分解为dx和dy,那么我们将视角转换到x和y方向上,假设在x方向上一共运动了p次来回,y方向上运动了q次来回,那么就偶然间t,使得
                                x方向上: t * dx = 2 * x * p                (x为长)
                                y方向上: t * dy = 2 * y * q                (y为高)
        我们将两式进行除法运算:
                                y * dx/ x * dy = p / q
        得到了p和q的关系比例,既得到在x和y方向来回次数的比值,因为小球大概多次回到起点,(在不约分的环境下)那么这个p和q存在一个最大公约数g,这个最大公约数就是小球回到起点的次数。标题要求第一次回到起点,既将p和q除去最大公约数g,得到第一次回到起点时,在x和y方向上来回的次数p和q。
        得到次数后,使用上述公式算出时间t,末了旅程s = sqrt(dx*dx+dy*dy)* t。留意末了效果保存俩位小数。
代码:

我这里用的是dev-c++
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int gcd(int a, int b){
  5.         return b == 0 ? a : gcd(b,a%b);
  6. }
  7. int main(){
  8.         int x = 343720;
  9.         int y = 233333;
  10.         int dx = 15;
  11.         int dy = 17;
  12.         int p = y * dx;
  13.         int q = x * dy;
  14.         int g = gcd(p,q);
  15.         p /= g;
  16.         q /= g;
  17.         int t = 2*x*p / dx;
  18.         double s = 1.0 * sqrt(dx*dx+dy*dy)*t;
  19.         printf("%.2f",s);
  20.         return 0;
  21. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表