1085:球弹跳高度的计算
时间限制: 1000 ms 内存限制: 65536 KB
提交数:113035 通过数: 63349
【题目描述】
一球从某一高度$h$落下(单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第$10$次落地时,共经过多少米? 第$10$次反弹多高?
输出包含两行,第1行:到球第$10$次落地时,一共经过的米数。第2行:第$10$次弹跳的高度。
【输入】
输入一个整数$h$,表示球的初始高度。
【输出】
第1行:到球第$10$次落地时,一共经过的米数。
第2行:第$10$次弹跳的高度。
注意:结果可能是实数,结果用double
类型保存。
提示:输出时不需要对精度特殊控制,用cout << ANSWER
,或者printf("\%g",ANSWER)
即可。
【输入样例】
20
【输出样例】
59.9219 0.0195312
【解题思路】
这个问题可以通过循环来模拟球的下落和反弹过程。首先,我们读入球的初始高度h
。然后,我们用一个循环来模拟球从第1次到第9次的落地和反弹过程(因为第10次落地时的总距离和第10次反弹的高度在循环结束后计算)。在每次循环中,我们将当前高度h
减半来模拟球的反弹,并将这次下落和反弹的总距离(即当前高度的两倍,因为球要下落再反弹)加到总距离s
上。循环结束后,我们还需要加上第10次下落的距离(即第10次反弹后的高度),但注意,此时不需要再将高度减半来计算第10次反弹的高度,因为题目已经要求输出第10次反弹的高度。
【示例代码】
#include<bits/stdc++.h>
using namespace std;
int main()
{
double h; // 球的初始高度
cin >> h; // 读取初始高度
double s = h; // 初始化总距离为球的初始高度,因为球首先需要下落这个距离
// 循环模拟球从第1次到第9次的落地和反弹过程
for(int i = 1; i <= 9; ++i)
{
h /= 2; // 每次循环将高度减半,模拟球的反弹
s += h * 2; // 将这次下落和反弹的总距离加到总距离上
// 注意:这里加的是h*2,因为球要下落h的距离,再反弹h的距离
}
// 输出到球第10次落地时,一共经过的米数
// 注意:这里不需要再加h,因为第10次下落的高度已经在第9次循环中被加到s中了
cout << s << endl;
// 输出第10次弹跳的高度
// 由于第9次循环结束时h已经是第10次反弹的高度的一半,所以直接输出h/2
cout << h / 2 << endl;
return 0;
}
标签:10,1085,落地,高度,弹跳,反弹,初始
From: https://blog.csdn.net/2301_79128218/article/details/140647210