矩阵求和-HDOJ2156

来源:互联网 发布:上海市政总院 知乎 编辑:程序博客网 时间:2024/06/05 09:36

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位小数。
这道题目我用数学归纳法做出来了,代码如下:

#include <iostream>#include <iomanip>using namespace std;double f(int n){    double sum=0;    for(int i=1;i<=n;i++)    {        sum+=1.0/(i+1);    }    return sum;}double Func(int n) //得到真因子之和{    if(n==1) return 1;    else if(n==2) return 3;    else        return Func(n-1)+1+2*f(n-1);}int main(){    int n;    while(cin>>n && n)    {        cout<<setprecision(2)<<std::fixed<<Func(n)<<endl;    }    return 0;}
可惜的是,运行时间超时。

网上找了个更简单的答案,成功AC。

#include <iostream>#include <iomanip>using namespace std;int main(){    int N;    while(cin>>N && N)    {        int i,n;        double sum=0;        n=N-1;        for(i=2;i<=N;i++)        {            sum+=n*1.0/i;            n--;        }        sum=sum*2+N;        cout<<setprecision(2)<<std::fixed<<sum<<endl;    }    return 0;}
规律不言自明,看来自己的观察还千火候啊!

0 0
原创粉丝点击