分数矩阵
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5535 Accepted Submission(s): 3288
Problem Description
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
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/1 1/2 1/3 1/4 1/5
1/2 1/1 1/2 1/3 1/4
1/2 1/3 1/1 1/2 1/3
1/2 1/3 1/4 1/1 1/2
1/2 1/3 1/4 1/5 1/1
矩阵中 1/1有5个,1/2有4个,1/3有2个,1/4有2个,1/5有1个,根据规律可减少循环次数
已AC代码:
#include<cstdio>
int main()
{
int n,m,i,j;
double sum,s;
while(scanf("%d",&n),n)
{
s=0;
for(i=2;i<=n;++i) //计算主对角线上方的和
s+=(1.0/(1.0*i) *(n-i+1));// i 要由 int 型变为 浮点型
// 在上三角中与主对角线平行的 1/i 有 n-i+1 个
sum=n+2*s; // 上等于下 再加主对角线
printf("%.2lf\n",sum);
}
return 0;
}