码迷,mamicode.com
首页 > 其他好文 > 详细

HDU_2156 分数矩阵

时间:2016-08-16 21:55:44      阅读:546      评论:0      收藏:0      [点我收藏+]

标签:

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
0
 
Sample Output
1.00
3.00
5.67
8.83
代码如下:
 1 #include <cstdio>
 2 int main()
 3 {
 4     int n;
 5     while(scanf("%d",&n)&&n!=0){
 6         double sum;
 7         if(n!=1){
 8             sum=n*1.00+2.00/n;
 9             for(int i=2;i<n;i++){
10                 sum+=i*2*1.00/(n-1*i+1);
11             }
12         }else{
13             sum=1.00;
14         }
15         
16         printf("%.2lf\n",sum);
17     } 
18     
19     return 0;
20 } 
思路解析:
              本题其实是一道找规律的基础题。本题有很多种解决问题的办法,在这里只介绍我思考的一种方法。以对角线为分界将矩阵一分为二。
以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.

HDU_2156 分数矩阵

标签:

原文地址:http://www.cnblogs.com/xzt6/p/5777880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!