题目分析

具体看代码吧

代码


#include<stdio.h>  
#include<math.h>  
int main()  
{  
    double L,W,x,y,R,a,v,s;  
    double dx,dy;  
    while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&L,&W,&x,&y,&R,&a,&v,&s)&&(L+W+x+y+R+a+v+s))  
    {  
        x-=R;    // 把台球看成一个点  
        y-=R;  
        L-=2*R;  
        W-=2*R;  
        a*=acos(0.0)/90.0;   // 把弧度数转化为角度数  
        // dx为x轴方向上的分量  
        dx=fmod(fmod(s*v*cos(a),2*L)+2*L,2*L);  //fmod函数 后面说
        // dy为y轴方向上的分量  
        dy=fmod(fmod(s*v*sin(a),2*W)+2*W,2*W);  
        if(x+dx<=L)      //画个图就差不多 就两个方向上下 左右
            x+=dx;  
        else if(x+dx<=2*L)  
            x=L-(x+dx-L);  
        else  
            x=x+dx-2*L;  
        if(y+dy<=W)  
            y+=dy;  
        else if(y+dy<=2*W)  
            y=W-(y+dy-W);  
        else  
            y=y+dy-2*W;  
        printf("%.2f %.2f\n",x+R,y+R);  
    }  
    return 0;  
}

fmod() 用来对浮点数进行取模(求余),其原型为:
    double fmod (double x);

 QAQ我下回写教程再也不去买西瓜了。。

点赞(4)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 5 条评论

旧时光丶 7年前 回复TA
@FtSan 我也觉得,应该是a=a/acos(0.0)*90.
火舞流沙 7年前 回复TA
@FtSan 第一次为正常取模,第二次是如果第一次为负数会跑出边界,所以加上2L再取模,同样正数也是这个道理
FtSan 7年前 回复TA
@FtSan s*v*cos(a)应该是点在x方向的距离变化两次取模的目的是什么??
FtSan 7年前 回复TA
dx=fmod(fmod(s*v*cos(a),2*L)+2*L,2*L);  关于这段能在讲解一下吗?不太能理解
FtSan 7年前 回复TA
a*=acos(0.0)/90.0;   // 把弧度数转化为角度数  
这个不是角度转化为弧度吗?