習題4-8 高空墜球 (20分)
阿新 • • 發佈:2021-01-20
技術標籤:# 浙大版《C語言程式設計(第3版)》題目集c語言c++visual studio
皮球從某給定高度自由落下,觸地後反彈到原高度的一半,再落下,再反彈,……,如此反覆。問皮球在第n次落地時,在空中一共經過多少距離?第n次反彈的高度是多少?
輸入格式:
輸入在一行中給出兩個非負整數,分別是皮球的初始高度和n,均在長整型範圍內。
輸出格式:
在一行中順序輸出皮球第n次落地時在空中經過的距離、以及第n次反彈的高度,其間以一個空格分隔,保留一位小數。題目保證計算結果不超過雙精度範圍。
輸入樣例:
33 5
輸出樣例:
94.9 1.0
原始碼
#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)
int main()
{
long begin, n;
scanf("%ld%ld", &begin, &n);
//double sum = begin, high = 0;
if (n == 0) { printf("0.0 0.0"); }
else {
//for (int i = 0; i < n; i++)//不能用for迴圈,執行超時,求一下公式
//{
// sum += high * 2;
// high = begin*1.0 / 2;
// begin = high;
//}
//n從1開始,多些幾項,找規律
//空中經過的距離=3*begin-begin/(2^(n-2)) 反彈高度=begin*0.5^n
double sum = 3 * begin - begin / (pow(2, n - 2));
double high = begin*pow(0.5, n);
printf("%.1lf %.1lf", sum, high);
}
//#include<stdio.h>
//#include<math.h>
// int main() {
// long high, n;
// scanf("%ld %ld", &high, &n);
// if (n == 0)printf("0.0 0.0");
// else printf("%.1lf %.1lf", 3.0*high - high / (pow(2, n - 2)), high*(pow(0.5, n)));
// return 0;
// }
getchar();
getchar();
return 0;
}
***謝謝!!!