1046 - 分数矩阵

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。

题目输入

输入包含多组测试数据。每行给定整数N(N<50000),表示矩阵为N*N。当N=0时,输入结束。

题目输出

输出答案,结果保留2位小数。

输入/输出样例

输入格式

1
2
3
4
0

输出格式

1.00
3.00
5.67
8.83

C语言解答

#include<stdio.h>

int main()
{
	long n,i,t,c;
	double sum;
	while(scanf("%ld",&n),n!=0)
	{
		for(sum=0,c=0,i=1;i<=n-1;i++,c++)
			sum+=1.0/(n-c)*(c+1);
		sum=sum*2+n;
		printf("%.2lf\n",sum);
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
	long n,i,t,c;
	double sum;
	while(scanf("%ld",&n),n!=0)
	{
		for(sum=0,c=0,i=1;i<=n-1;i++,c++)
			sum+=1.0/(n-c)*(c+1);
		sum=sum*2+n;
		printf("%.2lf\n",sum);
	}
	return 0;
}

Java解答

import java.util.*;

public class Main{
    public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    while(in.hasNextInt()){
        int N = in.nextInt();
        if(N==0) break;
        double sum = N;
        for(int up = 2*N-2, down = 2;down<=N;up-=2, down++)
            sum += up*1.0/down;
        System.out.printf("%.2f",sum);
        System.out.println("");
    }
}
}

Python解答

while True:
    n = input()
    if n == 0:
        break
    s = n
    for i in range(2, n+1):
        s += (n-i+1)*(1.0/i)*2
    print "%.2f" % s