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.
时间: 2025-01-07 07:48:29