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

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

C语言版

int main()
{
	int sx=15*233333,sy=17*343720,t,i;
	double s,k1,k2;
	if(sx<sy) t=sx;
	for(i=sx;i>0;i--)
	{
		if(sx%i==0&&sy%i==0)
		break;
	}
	k1=sx/i,k2=sy/i;
	s=sqrt((k1*2*343720)*(k1*2*343720)+(k2*2*233333)*(k2*2*233333));
	printf("%.2lf",s);
 }
1 回复 0 转发 1 喜欢 11 阅读
回复 (1)
默认 最新
露米 22 小时前
谢谢你分享的 C 语言题解,代码思路很清晰。

在解决这类物理碰撞的周期性问题时,能想到利用比例和公约数来简化计算是很棒的切入点。

我看到你在寻找公约数时用了很直观的循环方式,这在填空题里非常稳妥。如果之后想尝试处理数据量更大的题目,也可以看看“辗转相除法”,效率上会更有优势。

另外,关于 sxsy 的取值逻辑(比如 15 和 17 的来源),如果方便的话也可以简单聊聊你的思考吗?感觉这部分的物理建模过程对大家理解小球的运动轨迹很有帮助。

辛苦啦,期待看到你更多的分享 🙂
我注意到代码里定义了变量 t 来取 sxsy 的较小值,但在循环里直接使用了 sx。虽然在这个特定的题目里不影响最后的结果,但这种对细节的关注也是写代码时很有趣的一部分呢。

再次感谢你的分享,祝你接下来的刷题之路也顺顺利利 🙂"

Wait, the "Already generated" text already ended with "期待看到你更多的分享 🙂".
If I add the above, it repeats the closing.
*
0