小韦老师@神犇营-my0128-球弹跳的高度
作者:互联网
小韦老师@神犇营-my0128-球弹跳的高度
题目:
描述
一球从某一高度 h 落下(单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?
输出包含两行,
第 1 行:到球第 10 次落地时,一共经过的米数。
第 2 行:第 10 次弹跳的高度。
输入
输入仅一行,为一个整数 h,表示球的初始高度。
输出
输出为 2 行。
第1行:到球第 10 次落地时,一共经过的米数。
第 2 行:第 10 次弹跳的高度。
输入样例1
20
输出样例1
59.9219
0.0195312
提示
输出时不需要对精度特殊控制,用 cout << ANSWER,或者 printf ( “%f” , ANSWER)即可。
思路:
破题:
这里要求的是第 10 次弹跳的高度,和一共经过的米数。
对于第一次下落而言,经过的米数就是初始的高度,而对于之后的弹跳而言,
每一次高度都经过了两次:弹起来和落下去。
整体思路:
第一次下落,走过的米数是初始的高度,弹起来高度为原来高度的一半,然
后下落,现在这个高度经过了两次:弹起来和落下去。
后面以此类推。
具体步骤:
1.定义一个 double 型的变量 h,用来存储开始的高度,并输入 h。
2.定义一个累加器 sum ,用来记录一共经过的米数,并初始化为 0。
3.做十次操作:
- 将弹起来的高度累加到累加器中。
- 除了第一次,将落下去的高度累加到累加器中。
- 高度减半
for (int i = 0; i < 10; i++) { // 做 10 次操作
sum += h; // 将弹起来的高度累加到累加器中
// 除了第一次,将落下去的高度累加到累加器中
// 这里的写法等同于 if(i != 0),因为 i 为 0 是第一次
if(i) sum += h;
h /= 2; // 高度减半
}
4.输出累加器和最后的高度。
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
double h; // 开始高度
cin >> h;
double sum = 0; // 累加器,用来记录一共经过的米数
for (int i = 0; i < 10; i++) { // 做 10 次操作
sum += h; // 将弹起来的高度累加到累加器中
// 除了第一次,将落下去的高度累加到累加器中
// 这里的写法等同于 if(i != 0),因为 i 为 0 是第一次
if(i) sum += h;
h /= 2; // 高度减半
}
cout << sum << endl << h;
return 0;
}
标签:10,my0128,累加器,小韦,sum,米数,高度,累加,神犇 来源: https://blog.csdn.net/qq_31790997/article/details/96339021