HDU_2156 分数矩阵

时间:2023-03-08 23:24:03
HDU_2156 分数矩阵
Problem Description
            我们定义如下矩阵:
            1/1 1/2 1/3
            1/2 1/1 1/2
            1/3 1/2
1/1
            矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
            请求出这个矩阵的总和。
Input
            每行给定整数N (N<50000),表示矩阵为 N*N.当N为0时,输入结束。
Output
            输出答案,保留2位小数。
Sample Input
1
2
3
4
Sample Output
1.00
3.00
5.67
8.83
代码如下:
 #include <cstdio>
int main()
{
int n;
while(scanf("%d",&n)&&n!=){
double sum;
if(n!=){
sum=n*1.00+2.00/n;
for(int i=;i<n;i++){
sum+=i**1.00/(n-*i+);
}
}else{
sum=1.00;
} printf("%.2lf\n",sum);
} return ;
}
思路解析:
              本题其实是一道找规律的基础题。本题有很多种解决问题的办法,在这里只介绍我思考的一种方法。以对角线为分界将矩阵一分为二。
以4*4为例子
             1          1/2         1/3         1/4
             1/2       1            1/2         1/3
             1/3       1/2         1            1/2
             1/4       1/3         1/2         1
那么sum=n*1  +   2*1/2*3   +    2*1/3*2   +   2*1/4
那么我们就看到了规律,
不过第一个和最后一个无法算进来,所以提前算好,sum先=n*1   +   2*1/n
然后开始循环。~~答案粗线23333333.