原题链接:台球碰撞
解题思路:(提交了九次必须得mark一下啊,思路没问题就是太多细节导致wrong,坑死我了@_@)
思路:高中物理如果还没还给老师的话,很容易联想到运动的分解,我们可以把台球的运动分解为水平和竖直方向,然后分别处理(由于水平与竖直解法类同,我们只讨论水平方向)。
由题意可得:水平方向总路程为 v*s*cos(a*M_PI/180), 用初始坐标加路程得到一个位置,该位置明显越界,不过程序猿怎么能慌呢,我们把越界的部分沿边界对折,折叠之后如果还越界,那就一直折下去吧,哈哈。如下图:
注意事项:
1、看到别人说π的精度问题,我直接include math.h库,然后里面有一个M_PI,可以直接当π用。
2、数据类型最好用double。
3、注意到四舍五入,x = (int)(x*100+0.5)/100.0;
y = (int)(y*100+0.5)/100.0; 此处一定要除以100.0 , 不要100!!
参考代码:只贴一部分吧,总感觉太多让人心烦。
ys=v*s*sin(a*M_PI/180);//y方向的总路程 y += ys; while(y<R || y>W-R)//越界判断 { if(y<R) { y = 2*R-y; } else { y = 2*(W-R)-y; } } xs=v*s*cos(a*M_PI/180);//x方向总路程 x += xs; while(x<R || x>L-R)//越界判断 { if(x<R) { x = 2*R-x; } else { x = 2*(L-R)-x; } } x = (int)(x*100+0.5)/100.0;//四舍五入 y = (int)(y*100+0.5)/100.0; printf("%.2f %.2f\n",x,y); }
0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复