1170 - C语言6.18

通过次数

0

提交次数

0

时间限制 : 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)