分数求和|题解

分数求和

题目描述

S=1/2+1/6+1/12+1/20+1/30+1/42+… 求数列前n项和,答案保留2位小数

输入格式

整数n

输出格式

一个浮点数.

样例输入

10

样例输出

0.91


我定睛一看

这道题需要判断多个数的最小公倍数

一定需要辗转相除法

也就是

欧几里得算法

详细解释如下:

来源: 我的第一本算法书

在这里插入图片描述



在这里插入图片描述


咳咳咳

我们会发现

这是求最大公约数的

今天我们就不悲伤了

在这里插入图片描述


咳咳咳

当然

最大公约数

最小公倍数

之间就差了个 约 和 倍

所以

我不会写

逗死我了

咳咳咳

转回话题

其实就正常写就OK了

我也是借鉴了别人的


圣旨到

int x(int a,int b)
{
	int c;
	while(b)//欧几里得算法
	{
		c=a;
		a=b;
		b=c%b;
	}
	return a;
}

皇上驾到

#include <bits/stdc++.h> 
using namespace std;
int arr[11];
int x(int a,int b)
{
	int c;
	while(b)//欧几里得算法
	{
		c=a;
		a=b;
		b=c%b;
	}
	return a;
}
int main()
{
	int n,t=2,a[105],o[105],b[105];
	cin>>n;
	a[1]=2;
	for(int i=2;i<=n;i++)//求等差数列 fen
	{
		t+=2;
		a[i]=a[i-1]+t;
	}
	for(int i=1;i<=n;i++)	b[i]=a[i];
	for(int i=1;i<=n;i++)	if(i!=1)	a[i]=a[i-1]/x(a[i-1],a[i])*a[i];//求最大公约数
	t=0;
	for(int i=1;i<=n;i++)//求分子
	{
		o[i]=a[n]/b[i];
		t+=o[i];
	}
	double k=t/(double(a[n]));
	cout<<fixed<<setprecision(2)<<k;//保留两位小数
}

复制的记得点赞

爱赞不赞

爱吐槽就吐吧

有问题可以在下边提出来记得

@Y_bluefat

发布了7 篇原创文章 · 获赞 14 · 访问量 1591

猜你喜欢

转载自blog.csdn.net/Y_bluefat/article/details/105689774