分数矩阵(C语言)

题目描述

我们定义如下矩阵:
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

#include<stdio.h>
int main()
{
	int n,i,j;
	double ans = 0, num;//num为每一层的和,ans为结果
	for (i = 1; i <= 50000; i++)
	{
		num = 0;//初始化
		for (j = 2; j <= i; j++)
		{
			num += 1.0 / j;
		}
		num = num * 2 + 1;
		a[i] += num;
	}
	while (scanf("%d", &n)&&n!= 0)
		printf("%0.2f\n", a[n])return 0;
} 

但是此代码会超时,所以又用了下面的思路

#include<stdio.h>
int main()
{
	int n,i,j;
	double a[50000] = { 0 };
	double num=1;//num为每一层的和,a[i]为结果
	a[1] = 1;
	for (i = 2; i < 50000; i++)
	{
		num = num + 1.0 / i * 2;
		a[i] = a[i - 1] + num;
	}
	while (scanf("%d", &n)&&n!= 0)
		printf("%0.2f\n", a[n]);
	return 0;
}
发布了64 篇原创文章 · 获赞 68 · 访问量 2110

猜你喜欢

转载自blog.csdn.net/weixin_45884316/article/details/103433282