1046 - 分数矩阵
时间限制 : 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