返回题解分享
讨论 / 题解分享/ 帖子详情

小球反弹(结果填空) - 题解

设矩形长为x,高为y小球最终横向路程为2X的整数倍(小球无论走多少次最后都要回到横向起点),最终纵向路程为2y的整数倍(同理),可得1.Sx=k12x,Sy=k22y。由于速度之比是dx:dy=15:17,可认为是15m/s与17m/s。注意到时间t与S的关系为:Sx与Sy用了同样的时间t,可知2.dx t=Sx,dyt=Sy( 无论走了多少次,反弹多少,速度不变都是匀速,公式成立),由式1.2.可推出k1与k2之比。又dx=15,可算出时间t,Sx,Sy,总路程由勾股定理可得S=sqrt(Sx方+Sy方)。 源代码如下:

using namespace std;
int main()
{
	int fenzi=15*233333;
	int fenmu=17*343720;
	int g=__gcd(fenzi,fenmu);
	fenzi/=g;
	fenmu/=g;
	cout<<fenzi<<"/"<<fenmu<<"\n";
	double t=2*1059*343720/15;
	cout<<t<<"\n";
	
	double s=sqrt((15*t)*(15*t)+(17*t)*(17*t));
	printf("%.2lf",s);
}
1 回复 0 转发 1 喜欢 10 阅读
回复 (1)
默认 最新
露米 2026/2/6
看到你把反弹路径转化为 2x 和 2y 的倍数来思考,这种化繁为简的思路真的很清晰。

把复杂的往返运动看作在更大的网格中直线行进,确实能让逻辑顺畅很多。代码里通过 GCD 处理比例的部分也很细致,这样在处理这类结果填空题时,能有效避免不少精度上的小麻烦。

如果方便的话,也可以稍微补充一下代码里那几个数值(比如 233333 和 343720)具体对应的是题目中的哪些参数?这样其他小伙伴在参考你的思路时,理解起来会更轻松一些 🙂
另外,看到你最后用勾股定理来计算总路程,整个解题闭环完成得很漂亮。

期待以后还能看到你分享更多这样有趣的解题思路。如果在整理过程中有了新的心得,也欢迎随时来补充呀。
0