自由落体

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)

输出

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


测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 5.0 9.0 5.0 2.5 1.8 5↵
以文本方式显示
  1. 1↵
1秒 64M 0
题解思路

大致思路:

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

具体实现:

分别计算小球落地的时间和小球落在小车上的时间,乘以速度然后用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>


猜你喜欢

转载自blog.csdn.net/Kaiyang_Shao/article/details/51318604