参考方法:
#include <stdio.h> int main(){ float H=100; float sum=0; int n,i; //第n次落地 while(scanf("%d",&n)!=EOF){ sum+=H; //第一次落地经过距离 H/=2; //第一次反弹高度 if(n==1){ printf("第1次落地时,共经过%f米,反弹高为%f米\n",sum,H); } else{ for(i=2;i<=n;i++){ sum+=H*2; H/=2; } printf("第%d次落地时,共经过%f米,反弹高为%f米\n",n,sum,H); } } return 0; }
#include<stdio.h> int main(void) { float h = 100,sum = 0; int count = 0; while(count < 10) { if(count == 0) { sum += h; h = h / 2; } else { sum += h*2; h = h / 2; } count++; } printf("第10次落地时,共经过%.6f米,第10次反弹高%.6f米\n",sum,h); return 0; }
#include<stdio.h> int main() { int i; float sum=0,b=100; for(i=0;i<10;i++) { sum+=b*1.5; b=b/2; } printf("小球反弹的距离为:%f\n",b); printf("小球经过的总距离为:%f\n",sum-b); return 0; }
上边的笔记有点复杂了,这其实就是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。
等比数列的通项公式是:
等比求和:
①当q≠1时 或 ②当q=1时
所以计算运动路径的长度只需要把第二次到第十次的路径 * 2 + 第一次下落的高度 100 即可。
# 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; }
实例有些复杂化了,从代码看不出逻辑出来。
这只是个单纯的 下落 + 反弹 的周期。
#include <stdio.h> int main() { float s,h; h=100; for(int i=1; i<=10; i++){ s=s+h; // 下落 h = h / 2; s=s+h; // 反弹 } s=s-h; // 去掉最后一次反弹 printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h); return 0; }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1570c-exercise-example20
参考方法:
1569c-exercise-example20
参考方法:
1568c-exercise-example20
参考方法:
1567c-exercise-example20
上边的笔记有点复杂了,这其实就是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。
等比数列的通项公式是:
等比求和:
所以计算运动路径的长度只需要把第二次到第十次的路径 * 2 + 第一次下落的高度 100 即可。
1566c-exercise-example20
实例有些复杂化了,从代码看不出逻辑出来。
这只是个单纯的 下落 + 反弹 的周期。