2768: 【例39.2】 球弹跳高度的计算
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:43
解决:31
题目描述
一个球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第 $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; }