高中数学 算法初步题 求秒

一个球从100M高度自由落下,每次落地后反弹回原来高度的一半,再落下。编写程序,求当它第10次找地时。
(1)向下的运动共经过多少米?
(2)第10次着地后反弹多高?
(3)全程共经过多少米?

要编写程序的,我当时高中没有这块内容,邻居来问我全然不知,高分找帮忙

第1个回答  2009-09-12
就是个等比数列呗,
第一问,等比数列求和,设落地次数为n,推出L=200*[1-(1/2)^n],(n>=1,n属于整数)其中题目里是n=10的情况,所以把10带到式子里就Ok了,
第二问,等比数列求其中某一项,设弹起次数为n,推出通项公式是h=50*(1/2)^n-1,(n>=1,n属于整数),同样的,把n=10带入就好了
第三问,等比数列求和,不过稍微有点特殊,得把上去和下来的分别求和再加起来,设弹起数为n,算完应该是这个S=100*[2-(1/2)^n],(n>=1,n属于整数),弹起了几次就把几带进去,就能得到全程长度了。
第2个回答  2009-09-23
我用c++实现的
#include<iostream>
using std::cout;
using std::endl;
class Freefall
{
public:
Freefall(double x=0,int y=0):height(x),time(y){}
void get_result();
void view();
private:
double height;
int time;
};
void Freefall::view()
{
cout<<height<<endl;
cout<<time<<endl;
}
void Freefall::get_result()
{
int i=0;
double S_total=0,S_down=0,S_recent=0,N_time=0;
S_recent=height;
N_time=(time-1)*2+1;
for(i=0;i!=N_time;++i)
{
S_total+=S_recent;
if(i%2==0)
{
S_down+=S_recent;
S_recent=S_recent/2;
}
}
cout<<S_down<<endl;
cout<<S_recent<<endl;
cout<<S_total<<endl;
}
int main()
{
Freefall T(100,10);
T.get_result();
return 0;
}本回答被提问者采纳
第3个回答  2009-09-12
不难。

编写几个函数就OK了。

第一个函数:int getl(int h,int n) h是一开始的高度,n是下落次数,函数功能是求向下的运动共经过多少米.

int getl(int h,int n){
int m=0;
int i;
for(i=0;i<n;i++){
m=m+h;
h=h/2;
}
return m;
}

主函数中调用h=getl(100,10);就行了

第二个函数:int geth(int h,int n)参数同上,求第二问

int geth(int h,int n){
int i;
for(i=0;i<n;i++){
h=h/2;
}
return h;
}

第三个函数 int getm(int h,int n)参数同上,求第三问

int getm(int h,int n){
int i;
int m=h;
h=h/2;
for(i=0;i<n-1;i++){
m=m+h;
h=h/2;
}
m=m-h;
return m;
}
第4个回答  2009-09-12
这道编程题索然我不会,但看到是用递归调用来解得,好像楼下的麻烦咯吧!
相似回答