首先一开始想到的就是用循环来计算的,因此就写了如下代码spa
#include <stdio.h> #include <stdlib.h> #include <math.h> #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 公式 code
通过多少米? 100 200 250 275 287.5 100*(3-1/(2^(N-2))) 数学
反弹多高? 50 25 12.5 6.25 3.125 100/(2^N) it
#include <stdio.h> #include <stdlib.h> #include <math.h> #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; }貌似精简多了~