这实际上是一道初中数学题,已知长宽的比值,还有水平方向和竖直方向的速度比值。要想返回原点,那么水平方向上的总路程比上竖直方向上的总路程一定要满足长宽比。
不用在意题目上说的反弹,反弹后只是轨迹变了。不影响结果。
最后的返回值是水平总路程的平方加上竖直方向总路程的平方然后开平方
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
long long x = 343720;
long long y = 233333;
long long t = 1;
while(1){
if((15*t)%x == 0 && (17*t)%y == 0)){
break;
}
t++;
}
double ans = 2*sqrt(15*15*t*t + 17*17*t*t);//注意sqrt的返回值是double类型,不能用float接收不然会丢失精度
printf("%.2f",ans);
//printf("%.2f",2*sqrt(15*15*t*t+17*17*t*t));//也可以这样写但是不用管sqrt的返回值是什么类型,但是不太美观
return 0;
}
我们知道double类型要用 %lf 输出,但是上述代码用 %f 也可以,这是因为在 C 语言中,float
类型在传递给printf
函数时会被自动转换为double
类型进行处理。所以编译器会自动把 %f 转为 %lf 。