原题链接:[编程入门]自由下落的距离计算
解题思路:
由题意绘出如下简图:
小球弹起的高度容易求得,小球第一次从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 人评分
printf基础练习2 (C语言代码)浏览:801 |
【蟠桃记】 (C语言代码)浏览:826 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:705 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:766 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:1517 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:717 |
大神老白 (C语言代码)浏览:694 |
C语言训练-最大数问题 (C语言代码)浏览:648 |
C语言程序设计教程(第三版)课后习题10.1 (Java代码)浏览:1492 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:761 |