1170 - C语言6.18
时间限制 : 1 秒
内存限制 : 32 MB
一个球从100米高度自由落下,每次落地后反弹会原高度的一半,再落下,再反弹。求它在第n次落地时,共经过多少米以及第n次反弹多高。
题目输入
一个正整数n。
题目输出
第n次落地时共经过多少米以及第n次反弹多高,保留4位小数。
请注意行尾输出换行。
输入/输出样例
输入格式
10
输出格式
299.6094 0.0977
C语言解答
#include<stdio.h> int main(){ int n; int i; double sum=100.0,high=100.0; scanf("%d",&n); for(i=1;i<n;i++){ high=high/2; sum+=high*2; } high=high/2; printf("%.4lf %.4lf\n",sum,high); return 0; }
C++解答
#include <stdio.h> int main() { int i, n; float h, tot; h = 100; tot = 0; scanf("%d", &n); /* 模拟前n-1次反弹的过程 */ for (i = 1;i < n;i++) { tot += h; h = h / 2; tot += h; } /* 模拟第n次反弹的过程 */ tot += h; h = h / 2; printf("%.4f %.4f\n", tot, h); return 0; }
Java解答
import java.util.*; public class Main { public static void main(String args[]) { Scanner cin=new Scanner(System.in); int n=cin.nextInt(); double[] len=new double[100]; len[0]=100; for(int i=1;i<=n;i++) len[i]=len[i-1]/2.0; double sum=100; for(int i=2;i<=n;i++){ sum+=len[i-2]; } System.out.printf("%.4f %.4f\n",sum,len[n]); } }
Python解答
n =input() s = 100 a = 0 for i in range(1, n + 1): s += a a = 100 / 2 ** (i - 1.0) print "%.4f %.4f" % (s, a / 2)