解题思路:
首先用高中物理知识,把运动看成两个运动,一个是水平一个是竖直,
我就分析水平的吧,竖直的复制粘贴水平的。
注意事项:如果你真想弄懂就点一点看,不能着急
参考代码:
#include<stdio.h>
#include<math.h>
#define pi 3.1415926535897932
#define vx (v*cos(a*pi/180.0))
#define vy (v*sin(a*pi/180.0))
int main ()
{
int j=0,k=0,n=1;
double i=0;
double X[50],Y[50],l,w,x,y,r,a,v,s;
scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&l,&w,&x,&y,&r,&a,&v,&s);
while(l!=0||w!=0||x!=0||y!=0||r!=0||a!=0||v!=0||s!=0)
{
if((int)vx<0){
i=-vx*s;
i+=l-x;
}
else{
i=vx*s;
i+=x;
}
n=1;
while(i>(l-2*r)){
n++;
i-=(l-r*2);
}
if((int)vx>=0){
if(n%2==0)
X[j]=l-i;
else
X[j]=i;
}
else
{
if(n%2==0)
X[j]=i;
else
X[j]=l-i;
}
//竖直向下
if((int)vy<0){
i=-vy*s;
i+=w-y;
}
else{
i=vy*s;
i+=y;
}
n=1;
while(i>(w-2*r)){
n++;
i-=(w-r*2);
}
if((int)vy>=0){
if(n%2==0)
Y[j++]=w-i;
else
Y[j++]=i;
}
else
{
if(n%2==0)
Y[j++]=i;
else
Y[j++]=w-i;
}
scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&l,&w,&x,&y,&r,&a,&v,&s);
}
for(k=0;k<j;k++)
printf("%.2f %.2f\n",X[k],Y[k]);
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复