码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 蓝桥杯2024年第十五届省赛真题-小球反弹


    在这里插入图片描述
    以下两个解法感觉都靠谱,并且网上的题解每个人答案都不一样,目前无法判断哪个是正确答案。

    方法一:模拟
    代码参考博客

    #include 
    #include 
    #include 
     
    using namespace std;
     
    int main() {
        const int maxX = 343720;
        const int maxY = 233333;
        const int vx = 15;
        const int vy = 17;
     
        int x = 0, y = 0;
        int time = 0;
        double totalDistance = 0;
        bool xPositive = true, yPositive = true;
     
        while (true) {
        	//根据方向判断是+距离还是-距离
            x += xPositive ? vx : -vx;
            y += yPositive ? vy : -vy;
            time++;
            //移动的距离
            double segmentLength = sqrt(vx * vx+ vy * vy);
            // 检查是否碰到边界并反弹
            if (x > maxX || x < 0) {
                xPositive = !xPositive; // 反转X方向
                x = (x > maxX) ? maxX : 0; // 将坐标调整到边界上
            }
            if (y > maxY || y < 0) {
                yPositive = !yPositive; // 反转Y方向
                y = (y > maxY) ? maxY : 0; // 将坐标调整到边界上
            }
     
            // 累加路径长度
            totalDistance += segmentLength;
     
            // 假设当粒子回到原点时停止模拟
            if (x == 0 && y == 0) {
                break;
            }
        }
     
        // 输出总路径长度
        cout << "总路径为:" << totalDistance << endl;
     
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    答案:14261800000

    方法二:数学物理题
    把速度分解成x方向和y方向,已知x方向来回一趟的时间是2343720/15,y方向来回一趟的时间是2233333/17,已知小球要回到原点,即x和y方向要同时回到原点,时间就是2343720/15和2233333/17的整数倍,即最小公倍数。就能把时间t求出来,然后乘以速度sqrt(15^2+17^2)就是总路程。

    #include 
    using namespace std;
    int main() {
        int a = 2*343720/15;
        int b = 2*233333/17;
        int i = 1;
        while(i*a%b!=0){
            i++;
        }
        double t = i*a;
        double s = t*sqrt(pow(15, 2)+pow(17, 2));
        cout<<fixed<<setprecision(2)<<s<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    输出:28520969829.65

    复习:最大公因数GCA(Greatest Common Divisor)和最小公倍数LCM(Least Common Multiple)

    int my_gcd(int a,int b){
        if(a%b==0)return b;
        else return my_gcd(b, a%b);
    }
    
    int my_lcm(int a,int b){
        int i=1;
        while(i*a%b!=0)i++;
        return i*a;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Linux基本指令(二)
    【小黑送书—第七期】>>程序员To架构师?一起来看架构师系列书籍推荐
    Docker系列---【mysql容器手动停止后,重启服务器,mysql容器被删掉了,如何恢复mysql数据?】...
    想做WMS仓库管理系统,找了好久才找到云表
    Pandas缺失值inf与nan处理实践
    Android 12 intent-filter添加android:exported后任然报错解决方法
    SystemVerilog——class类
    中小企业建设数字化工厂,选择集成还是重构
    ros发布节点和接收节点的编写
    AI 杀疯了,NovelAI开源教程
  • 原文地址:https://blog.csdn.net/qq_61735602/article/details/137997607
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号