原题链接:[编程入门]自由下落的距离计算
解题思路:
由题意绘出如下简图:
小球弹起的高度容易求得,小球第一次从M出下落,则第N次下落弹起的高度为M/2N-1。
小球第1次落地后到第2次落地之间所经过的路程为上升+下降(图上斜线+直线),上升与下降路程均和第2次下落时的高度相等,所以,小球到第N次落地,经过的总路程为s,每次下落时的高度分别为为s1=M/20,s2=M/21 ..... sN=M/2N-1,s=2*s1+2*s2+...2*sN-s1,为什么要减去M,因为第1次是从M出落下,只有一个s1,所以要减去,从图上容易看出开始时无斜线部分。
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int M,N,i; //M为下落的高度,N为次数
float bs=0,s=0; //bs为弹起的高度也是下落的高度,s为经过的总路程
scanf("%d %d",&M,&N);
for(i=1;i<=N;i++)
{
bs=M/(pow(2,(i-1))); //此处的bs为第i次下落时的高度
s=s+2*bs; //2*bs为每次的路程,每次路程依次相加为总路程 。注:每次路程指上次小球落地到本次小球落地,第一次除外,所以后面要减去第一次下落的高度M
}
bs=M/(pow(2,N)); //求出的bs为第N次弹起的高度
printf("%.2f %.2f",bs,s-M);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复