2768: 【例39.2】 球弹跳高度的计算

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:43 解决:31

题目描述

一个球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第 $10$ 次落地时,共经过多少米?第 $10$ 次反弹多高?

输入

输入一个整数$h$ ($1≤h≤100$),表示球的初始高度。

输出

输出包含两行:
第 $1$ 行:到球第 $10$ 次落地时,一共经过的米数。
第 $2$ 行:第 $10$ 次弹跳的高度。

样例输入 复制

18

样例输出 复制

53.9297
0.0175781

提示

时间复杂度O(n)

#include<bits/stdc++.h>
using namespace std;
double n,ans,tot;
int main(){
    cin>>n;
    double a=n;
    for(int i=1;i<=10;i++)
    {
        tot=tot+(n*2);
        n=n/2;
    }
    cout<<tot-a<<endl;
    cout<<n;
    return 0;
}

Sn=a1(1-qn)/(1-q)

所以到第10次落地距离S包含:

下落10段距离,S10=n*(1-(1/2)10)/(1-1/2)=2*n-n/512

上升9段距离,S9=n*1/2*(1-(1/2)9)/(1-1/2)=n-n/512

S=S10+S9=3*n-2*n/512=1534*n/512

时间复杂度:O(1)

#include<bits/stdc++.h>
using namespace std;
double n;
int main()
{
    cin>>n;
    cout<<1534*n/512<<endl;
    cout<<n/1024<<endl;
return 0;
}