问题描述:
一球从100米高度*落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
方法一:
程序实现:
#include<stdio.h>
int main()
{
float h,s;
h=s=100;
h=h/2; //第一次反弹高度
for(int i=2;i<=10;i++)
{
s=s+2*h;
h=h/2;
}
printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h);
return 0;
}
方法二:是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。
等比数列的通项公式是:
等比求和:① 当q≠1时 或 ② 当q=1时
# include <stdio.h>
# include <math.h>
int main(void)
{
float a = 100;//等比数列首项;
float q = 0.5;//公比
float s,h;//定义等比数列的和s,第十项h;
h = a*pow(q,10);//第十次弹起的高度,注意第十次落地的高度需要h*2
s = 2*(50-h*q*2)/(1-q)+100;
printf("第十次的高度为%f;总路程为%f",h,s);
return 0;
}
结果:
第10次落地时,共经过299.609375米,第10次反弹高0.097656米