練習問題4-8空中ドロップ(20点)

783 ワード

ボールはある所定の高さから自由に落下し、地面に触れた後に元の高さの半分に跳ね返り、さらに落下し、再び跳ね返り、......、と繰り返す.ボールはn回目の着地時、空中で全部でどのくらいの距離を通りますか?n回目のリバウンドの高さはいくらですか?
入力形式:
入力は1行に2つの非負の整数を与え,それぞれボールの初期高さとnであり,いずれも長整数範囲であった.
出力フォーマット:
1行目にボールがn回目に着地したときに空中を通過する距離と、n回目のリバウンドの高さを順番に出力し、その間を1つのスペースで区切って小数点を保持します.問題は計算結果が二重精度の範囲を超えないことを保証する.
サンプルを入力:
33 5

出力サンプル:
94.9 1.0
#include   
#include 

int main(){  
	int h0,n;
	scanf("%ld %ld",&h0,&n);
	double s=h0,h;
	
	h=h0/pow(2,n);
	
	for(int i=1;i<=n;i++){
		s+=2*h0/pow(2,i);	
	}	
	if(n==0){
		s=0	;
		h=0 ; //                    
	}else{
		s=s-2*h0/pow(2,n);
	}
		printf("%.1f %.1f",s,h);
    return 0;  
 }