comeononon


私信TA

用户名:onononcome

访问量:1040

签 名:

是日已过,命亦随减,如少水鱼,斯有何乐!当勤精进,如救头燃

等  级
排  名 3171
经  验 2010
参赛次数 0
文章发表 11
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

原题链接:[编程入门]自由下落的距离计算

解题思路:

由题意绘出如下简图:

12.PNG

  1. 小球弹起的高度容易求得,小球第一次从M出下落,则第N次下落弹起的高度为M/2N-1

  2. 小球第1次落地后到第2次落地之间所经过的路程为上升+下降(图上斜线+直线),上升与下降路程均和第2次下落时的高度相等,所以,小球到第N次落地,经过的总路程为s,每次下落时的高度分别为为s1=M/20,s2=M/21  .....   sN=M/2N-1s=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 人评分

  评论区

  • «
  • »