解题思路:
 参考 了 别人的代码 ,我的思路没有他们的好,但是,通过我自己的努力,用自己的思路做出来了,

碰到难题,真的,要得好几天,都没思路,但自己做出来,是真开心。

 思路 : 球每次撞壁,只有一个方向上的速度改变方向,另外一个不变,

#include<stdio.h>

#include<math.h>

//#define PI 3.14159265

int l,w,x,y,r,a,v,s;

double l1,w1,x1,r1,a1,v1,s1,zx,zy;

double xa,ya;

int  shuru(){

if(scanf("%d %d %d %d %d %d %d %d",&w,&l,&x,&y,&r,&a,&v,&s)!=EOF){

l1=l;w1=w;x1=x;r1=r;a1=a;v1=v;s1=s;

return 1;

}   

    else return 2;

}  

void diyici(){

double y1,sx,sy;y1=y;

a1=a*asin(1)*2/180; // asin(1)*2 替代 派

xa=cos(a1);

ya=sin(a1);

zx=x1;zy=y1;

//先计算X方向和Y方向撞墙的时间进行比较,看那个方向先撞墙

while(1){

//x方向 撞墙的时间 

if(xa>0){

sx=(w1-zx-r1)/(v*xa);


}

else{

sx=(zx-r1)/(v*(-1*xa));


}

 

if(ya>0){

sy=(l1-zy-r1)/(v*ya);

}

else{

sy=(zy-r1)/(v*(-ya));

}

 

if(sx<sy){     // 110 100 70 10 5 180 1 9999

zx=zx+v*xa*sx;

zy=zy+v*ya*sx; // 撞墙时的坐标

 

s1=s1-sx;// 到撞墙用的时间

//printf("B zx=%.2f zy=%2.f s1=%f sx=%f xa=%f\n",zx,zy,s1,sx,xa);

if(s1>0)

xa=-xa;// 撞墙后方向改变了,只有一个方向改变哦

}

if(sx>sy){

zx=zx+v*xa*sy;

zy=zy+v*ya*sy;

s1=s1-sy;

    //printf("A zx=%.2f zy=%2.f s1=%f\n",zx,zy,s1);

if(s1>0)

ya=-ya;

}

// sx=sy ?

if(sx==sy){

zx=zx+v*xa*sy;

zy=zy+v*ya*sy;

s1=s1-sy;

 if(s1>0){

 ya=-ya;

xa=-xa;

}

}

if(s1<=0){

if(s1<0){

zx=zx+v*xa*s1;

zy=zy+v*ya*s1;

}

printf("%.2f %.2f\n",zx,zy);

break;

}

}

}

//主函数部分

int main(){

while(shuru()==1){

if(l==0)

break;

diyici();

}

}


点赞(1)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论