首先一开始想到的就是用循环来计算的,所以就写了以下代码
#include
#include
#include
#define H 100
#define N 10
int main(void){
int i=1;
float weiyi,distance=0.0f;
while(i<=N){
if(i==1){
distance=H;
weiyi=H/2;}
else{
distance+=2*(H/pow(2,i-1));
weiyi+=(H-weiyi)/2;}
i++;
}
printf("经过路程:%f\n",distance);
printf("位移:%f\n",weiyi);
return 0;
}
然后觉得似乎可以精简,于是用上高中学的数学归纳法总结一下规律得出一下表
第N次落地/第N次反弹 1 2 3 4 5 公式
经过多少米? 100 200 250 275 287.5 100*(3-1/(2^(N-2)))
反弹多高? 50 25 12.5 6.25 3.125 100/(2^N)
#include
#include
#include
#define H 100
#define N 10
int main(void){
printf("经过路程:%f\n",H*(3-1.0/pow(2,N-2)));
printf("位移:%f\n",H-H/pow(2,N));
return 0;
}
貌似精简多了~