版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Kaiyang_Shao/article/details/51318604
问题描述
背景
在高为 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)
输出
小车能接受到的小球个数。
大致思路:
就是找到小球可以与小车接触(不仅包括在车子上,也包括与车子前面相接触)的区间,然后看在这个区间里面有多少个整数就可以了。
具体实现:
分别计算小球落地的时间和小球落在小车上的时间,乘以速度然后用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>