原题链接:[编程入门]自由下落的距离计算
解题思路:
第一步:输入变量m,n,h和s,(m为初始高度,n为落地次数,h为第n次反弹高度,s为总路程)并输入数值分别为m,n赋值。
首先:初始高度为m,不进入循环内,将其赋值s。
其次:循环内部,从第一次落地,每次反弹高度为h=m/2^i,反弹后,小球会再下落h的高度,所以h要乘2。
注意事项:
(我个人感觉答案有问题,第n次下落后的反弹高度为h=m/2^n,该反弹高度是不会进入循环的,所以真正的s应该由三部分组成:m,循环内部每一次反弹高度的两倍,以及最后一次反弹高度h=m/2^n。我感觉这才是真正的s。但为了代码能过没办法,只能把第n次的反弹高度给去掉了)
参考代码:
#include<stdio.h> #include<math.h> int main() { int n; double m,h,s=0;//m为初始高度,n为落地次数,h为第n次反弹高度,s为总路程 scanf("%lf %d",&m,&n); s=m;//初始高度不会反弹,赋值给s for(int i=1;i<n;i++) { h=m/pow(2,i); s+=2*h;//因为反弹后的摔落高度为h,所以要乘2 } printf("%.2lf %.2lf",m/pow(2,n),s); return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复