题意:
方法一:
模拟
思路:根据题意直接模拟,计算出路程总和,反弹的高度。并输出。
#include <bits/stdc++.h>
using namespace std;
int main(){
double x,sum=0;//sum表示路程总和,x表示反弹的高度
cin >> x;
sum+=x;
for(int i=1;i<5;i++){
sum+=x;//路程累加
x/=2;//反弹高度减半
}
printf("%.6f\n%.6f\n",sum,x/2);
return 0;
}
时间复杂度:
空间复杂度:![]()
方法二:
公式法
思路:将方法一中的常数级别的循环变为直接求解。
按照下图所示:
#include <bits/stdc++.h>
using namespace std;
int main(){
double x;
cin >> x;
printf("%.6f\n%.6f\n",23.0/8*x,x/32);//公式计算输出
return 0;
}
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号