首先一開始想到的就是用循環來計算的,因此就寫了如下代碼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; }貌似精簡多了~