2768: 【例39.2】 球弹跳高度的计算
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:46
解决:34
题目描述
一个球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第 $10$ 次落地时,共经过多少米?第 $10$ 次反弹多高?
输入
输入一个整数$h$ ($1≤h≤100$),表示球的初始高度。
输出
输出包含两行:
第 $1$ 行:到球第 $10$ 次落地时,一共经过的米数。
第 $2$ 行:第 $10$ 次弹跳的高度。
第 $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;
}