您的位置:首页 > 其它

自由落体

2016-05-04 22:12 169 查看
问题描述


背景

在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1。在地面上有一个小车(长为 L,高为 K,距原点距离为 S1)。已知小球下落距离计算公式为 d=1/2*g*(t^2),其中 g=10,t
为下落时间。地面上的小车以速度 V 前进。



小车与所有小球同时开始运动,当小球距小车的距离 <= 0.00001 时,即认为小球被小车接受(小球落到地面后不能被接受)。
请你计算出小车能接受到多少个小球。


输入

H,S1,V,L,K,n (l<=H,S1,V,L,K,n <=100000)


输出

小车能接受到的小球个数。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例 1以文本方式显示

5.0 9.0 5.0 2.5 1.8 5↵

以文本方式显示

1↵

1秒64M0
题解思路

大致思路:

就是找到小球可以与小车接触(不仅包括在车子上,也包括与车子前面相接触)的区间,然后看在这个区间里面有多少个整数就可以了。

具体实现:

分别计算小球落地的时间和小球落在小车上的时间,乘以速度然后用S减一下就可以找到相应的区间(注意要加上小车本身的长度),然后就是从0开始找整数,如果在区间里面就计数,否则就退出。

注意事项:

注意题目中的精度要求。

实现代码

<span style="font-family:Microsoft YaHei;font-size:14px;">#include<stdio.h>
#include<math.h>
int main()
{
double h,s,v,l,k,t1,t2,s1,s2,temp;
int n,i,count=0;
scanf("%lf %lf %lf %lf %lf %d",&h,&s,&v,&l,&k,&n);
t1=sqrt(2*(h-k)/10.0);
t2=sqrt(2*h/10.0);
s1=s-v*t2;
s2=s-v*t1+l;
for(i=0;i<n;i++)
{
temp=(double)(i+0.00001);
if(temp>=s1&&temp<=s2)
{
count++;
}
}
printf("%d\n",count);
return 0;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: