解题思路:(提交了九次必须得mark一下啊,思路没问题就是太多细节导致wrong,坑死我了@_@)

思路:高中物理如果还没还给老师的话,很容易联想到运动的分解,我们可以把台球的运动分解为水平和竖直方向,然后分别处理(由于水平与竖直解法类同,我们只讨论水平方向)。 

       由题意可得:水平方向总路程为 v*s*cos(a*M_PI/180), 用初始坐标加路程得到一个位置,该位置明显越界,不过程序猿怎么能慌呢,我们把越界的部分沿边界对折,折叠之后如果还越界,那就一直折下去吧,哈哈。如下图:

 

微信图片_20180403222954_gaitubao_com_902x507.jpg

注意事项:
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);       
}


点赞(96)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

花开若相惜 4年前 回复TA
思路真的好,运动分解真的秀
z能 5年前 回复TA
@小懒 不用,仍然是x = 2*R-x
小懒 5年前 回复TA
那x落在0到R之间的情况呢 不应该是x=x+R