题意:
方法一:
模拟
思路:根据题意直接模拟,计算出路程总和,反弹的高度。并输出。
#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; }
时间复杂度:空间复杂度: