HDU_2156 分数矩阵
2016-08-16 21:04
148 查看
[align=left]Problem Description[/align]
我们定义如下矩阵:
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位小数。
[align=left]Sample Input[/align]
1
2
3
4
0
[align=left]Sample Output[/align]
1.00
3.00
5.67
8.83
代码如下:
思路解析:
本题其实是一道找规律的基础题。本题有很多种解决问题的办法,在这里只介绍我思考的一种方法。以对角线为分界将矩阵一分为二。
以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.
我们定义如下矩阵:
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位小数。
[align=left]Sample Input[/align]
1
2
3
4
0
[align=left]Sample Output[/align]
1.00
3.00
5.67
8.83
代码如下:
#include <cstdio> int main() { int n; while(scanf("%d",&n)&&n!=0){ double sum; if(n!=1){ sum=n*1.00+2.00/n; for(int i=2;i<n;i++){ sum+=i*2*1.00/(n-1*i+1); } }else{ sum=1.00; } printf("%.2lf\n",sum); } return 0; }
思路解析:
本题其实是一道找规律的基础题。本题有很多种解决问题的办法,在这里只介绍我思考的一种方法。以对角线为分界将矩阵一分为二。
以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 分数矩阵
- HDU 2156 分数矩阵
- HDU 2156 分数矩阵 (水题)
- HDU 2156 分数矩阵
- hdu 2156 分数矩阵
- HDU 2156 分数矩阵
- HDU 2156 分数矩阵。
- hdu 2156 分数矩阵
- hdu 2156 分数矩阵
- hdu-2156-分数矩阵
- HDOJ(HDU) 2156 分数矩阵(嗯、求和)
- Hdu-2156-分数矩阵 [水题]
- HDOJ(HDU) 2156 分数矩阵(嗯、求和)
- hdu 2156 分数矩阵
- hdu 2156 分数矩阵
- hdu 2156 分数矩阵
- HDU 2156 分数矩阵
- hdu 2156 分数矩阵
- hd 2156 分数矩阵
- HDU 2156 分数矩阵