原题链接:台球碰撞
这是我的代码,思路是走一步,就做一次边界碰撞检测,如果碰到边界了就改变角度 a 继续走。题示的测试用例能算出正确结果,提交后的第一个测试用例也能通过,但第二个就通不过了,四条边界正向,负向的反弹考虑了,还有如果边界围成的是正方形,主对角线和次对角线上的反弹也考虑了,不知道还有哪种情况没考虑到,实在是不会了。如果有大佬知道第二个测试用例是啥,可不可以截图发出来,阿里嘎多。
#include <stdio.h>
#include <math.h>
int main(void)
{
double L,W,x,y,R,a,v;
int s,temp;
while(~scanf("%lf %lf %lf %lf %lf %lf %lf %d",&L,&W,&x,&y,&R,&a,&v,&s))
{
if(L==0)
break;
for(temp=1;temp<=s;++temp)
{
x=x+v*cos(a*acos(-1)/180);
y=y+v*sin(a*acos(-1)/180);
if(y+R>=W)
{
if(a>=0 && a<=90)
a=360-a;
if(a>90 && a<=180)
a=360-a;
}
if(y-R<=0)
{
if(a>=180 && a<=270)
a=360-a;
if(a>270 && a<=360)
a=360-a;
}
if(x+R>=L)
{
if(a>=0 && a<=90)
a=180-a;
if(a>=270 && a<=360)
a=180+360-a;
}
if(x-R<=0)
{
if(a>=90 && a<=180)
a=180-a;
if(a>180 && a<=270)
a=180+360-a;
}
}
printf("%.2lf %.2lf\n",x,y);
}
return 0;
}
0 分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复