1. 程式人生 > >ACMNO.14一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數 輸入 M N 輸出 它在第N次落地時反彈多高?共經過多少米

ACMNO.14一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數 輸入 M N 輸出 它在第N次落地時反彈多高?共經過多少米

題目描述

一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。
 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數

輸入

M N

輸出

它在第N次落地時反彈多高?共經過多少米? 保留兩位小數,空格隔開,放在一行

樣例輸入

1000 5

樣例輸出

31.25 2875.00

來源/分類

C語言 

題目截圖:
在這裡插入圖片描述
思路:

首先想到用for迴圈語句來解決!
下落一次比較長,要加上!
s+=a;
然後長度縮減一半!
a=a/2;
再加上縮減之後的一半!
s+=a;

但是整個程式計算的是它從被丟擲點,到落地的距離!
我們要計算的是,他懸空終止的總距離!

再減去最後一次反彈起來的距離!
s-=a;

程式碼:

#include<iostream>
using namespace std;
int main()
{
	double a,b,s;
	s=0;
	cin>>a>>b;
	//printf("a  %.2f\n",a);
	//printf("b  %.2f\n",b);
	//printf("s  %.2f\n\n\n",s);
	for(int i=0;i<b;i++)
	{
		s+=a;
		a=a/2;
		s+=a;
	//printf("a  %.2f\n",a);
	//printf("s  %.2f\n",s);
	}
	s-=a;
	printf("%.2f %.2f",a,s);
}

程式碼截圖:
在這裡插入圖片描述
程式碼執行截圖:
在這裡插入圖片描述
OJ結果:
在這裡插入圖片描述