蓝桥杯省赛真题C++B组-小球反弹

一、题目

有一长方形,长为 343720 单位长度,宽为 233333 单位长度。在其内部左上角顶点有一小球(无视其体积),其初速度如图所示且保持运动速率不变,分解到长宽两个方向上的速率之比为 dx:dy = 15:17。小球碰到长方形的边框时会发生反弹,每次反弹的入射角与反射角相等,因此小球会改变方向且保持速率不变(如果小球刚好射向角落,则按入射方向原路返回)。从小球出发到其第一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度?答案四舍五入保留两位小数。


答案提交    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个小数,在提交答案时只填写这个小数,填写多余的内容将无法得分。

二、思路

        是看别人的代码的解题思路,我们从初始位置发射这个速率,会在长和宽上都会反弹,我们可以利用两次for循环来找出在长和宽上反弹的次数,再通过次数分别算出长和宽总的路程,看其之比是否是15:17;如果是,利用勾股定理,算出斜边。

       计算长方形长边的两倍长度, 因为小球在长边反弹时,每次走过的路程是长边长度的两倍, 计算长方形宽边的两倍长度, 因为小球在宽边反弹时,每次走过的路程是长边长度的两倍。

三、代码

#include<iostream>
#include<cmath>
typedef long long LL;//定义一个类型别名,因为我们计算下来数可能非常大
// ,我们在很多地方都要用到long long ,也方便简化代码 
//长为 343720 单位长度,宽为 233333 单位长度
int main(){
	//一次反弹所对应的长边的距离 
	LL lengthDouble =  2*343720;
	//一次反弹所对应的宽边的距离 
	LL widthDouble =  2*233333;
	for(LL i = 1; i < 10000; i++){
		for(LL j = 1; j < 10000; j++){
		//(lengthDouble*i)/t      15
	//_______________________ = _______时间我们可以约掉 ,看水平路程和垂直路程是否是15:17 
		//(widthDouble*j)/t       17
			if(lengthDouble*i*17 == widthDouble*j*15){
				std::cout.precision(2);
				std::cout<<std::fixed<<std::sqrt((lengthDouble*i)*(lengthDouble*i) + (widthDouble*j)*(widthDouble*j));
				return 0; //1100325199.77
			}
		 
		}
		
	}
	return 0; 
} 

四、反思

有几个问题

  1. #include<cmath>和#include<math.h>有什么区别:cmath 里的函数和符号都被放置在 std 命名空间中,是C++的

  2. 要会使用定义类型别名的使用方法typedef long long LL;

  3. for循环的初始条件是从一开始的,如果是0,也就没有反弹,肯定不会满足15:17的速率比,

  4. 确定精度cout.precision(2)注意:这里是.

  5. 固定点表示法cout::fixed注意:这里是::

  6. 第一个return 0,是找到合适的解提前结束循环

  7. 第二个return 0,是遍历所有可能的结果后结束循环

### 第15届蓝桥杯C/C++B真题概述 第15届蓝桥杯C/C++B的比难度有所提升,旨在更全面地评估参者的编程能力和逻辑思维能力。以下是该事的部分典型题目及其解题思路: #### 握手问题 此题可以通过两种方法求解: - **合数学**:利用排列合的知识计算可能的握手次数。 - **暴力枚举**:通过遍历所有可能性来统计握手情况。 #### 小球反弹 对于小球反弹的问题,主要关注的是物理运动学中的反射原理以及边界条件处理[^2]。 #### 好数算法 采用暴力解法即可解决问题,并且在此场景下不会导致超时现象发生。具体实现涉及对给定范围内的整数逐检验其是否满足特定性质。 #### R格式转换 R格式相关题目通常涉及到字符串操作或者模式匹配等内容,在解答这类问题时需注意输入输出格式的要求严格遵循题目描述。 #### 宝石合 应用唯分解定理作为核心理论依据来进行设计解决方案,重点在于如何有效地将大数值拆分成若干质因数乘积形式并据此构建合理的算法框架。 #### 数字接龙游戏 运用深度优先搜索(DFS)策略探索所有可行路径直至找到符合条件的结果序列为止;期间要注意剪枝优化以提高效率减少不必要的运算量。 #### 拔河比安排 考虑团队成员力量分配均衡性等因素影响最终胜负关系,从而制定相应的模拟过程或贪心法则指导下的决策流程。 以上即为部分公开可得之第15届蓝桥杯C/C++B试题概览及对应解析方向。 ```cpp // 示例代码片段展示了个简单的好数判断程序 #include <iostream> using namespace std; int main(){ int n; cin >> n; bool isGoodNumber = true; while(n != 0){ int digit = n % 10; if(digit == 3 || digit == 4 || digit == 7){ isGoodNumber = false; break; } n /= 10; } cout << (isGoodNumber ? "Yes" : "No") << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值