HOJ 2156 分数矩阵
2017-09-30 00:07
190 查看
#这题本以为很简单,但原本用双层循环居然超时了
题目
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
[align=left]Input[/align]
每行给定整数N (N<50000),表示矩阵为 N*N.当N为0时,输入结束。
[align=left]Output[/align]
输出答案,保留2位小数。
本人代码
题目
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
[align=left]Input[/align]
每行给定整数N (N<50000),表示矩阵为 N*N.当N为0时,输入结束。
[align=left]Output[/align]
输出答案,保留2位小数。
本人代码
#include<iostream> int main(){ int n; while(scanf("%d",&n) && n){ double sum = 0.0; /*for(int i = 1 ; i <= n ; i++){ sum += 1.0; if(n == 1) break; for(int j = 2 ; j <= i ; j++){ sum += 2 * ( 1.0 / j*1.0 ); } }*/ sum += n; int p = n-1; for(int i = 1 ; i <= n-1 ; i++){ sum += 2.0 / ( i + 1 ) * p; p--; } printf("%.2f\n",sum); } return 0; }