zoukankan      html  css  js  c++  java
  • 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
    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
    ",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.
  • 相关阅读:
    设置一个alias直接推到github
    JSON
    分部式类定义
    sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
    ibatis 连接数据库时的错误
    ibatis 连接数据库
    [ASP.NET] C#字符串处理
    20130401学习笔记
    最大公约数和最小公倍数
    从客户端中检测到有潜在危险的 Request.Form 值 解决方案
  • 原文地址:https://www.cnblogs.com/xzt6/p/5777880.html
Copyright © 2011-2022 走看看