问题 A: 分数矩阵
题目描述
我们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增。
请求出这个矩阵的总和。
输入
输入包含多组测试数据。每行给定整数N(N<50000),表示矩阵为N*N。当N=0时,输入结束。
输出
输出答案,结果保留2位小数。
样例输入
1 2 3 4 0
样例输出
1.00 3.00 5.67 8.83
AC代码:
#include<stdio.h>
int main ()
{
int n;
int i;
double sum;
while(scanf("%d",&n),n)
{
sum=0;
sum+=n*1;
for (i=2;i<=n;i++)
{
sum+=1.0/i*(n-i+1)*2;
}
printf ("%.2f\n",sum);
}
return 0;
}
/**************************************************************
Problem: 1067
User: 2015212040209
Language: C++
Result: 正确
Time:0 ms
Memory:1116 kb
****************************************************************/
自己写的代码在oj上显示运行错误:
#include<cstdio>
int main()
{
int N;
while(scanf("%d",&N),N!=0)
{
double num[N][N],sum=0.0;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(i==j) num[i][j]=1.0;
else if(i<j) num[i][j]=1.0/(j-i+1);
else num[i][j]=1.0/(i-j+1);
sum+=num[i][j];
}
}
printf("%.2f\n",sum);
}
return 0;
}
/**************************************************************
Problem: 1067
User: 2015212040209
Language: C++
Result: 运行错误
****************************************************************/
自己感觉是可行的方案,不知为什么会是这样的结果,检查了多遍还是不得其原因。在此希望好心人可以帮忙纠正,不吝赐教。
Runtime Error:Segmentation fault