【牛客网题目详解】1008 牛牛学数列3

链接:https://ac.nowcoder.com/acm/contest/47124/1008
来源:牛客网

题目描述

牛牛准备继续进阶,计算更难的数列

输入一个整数 n,计算 1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...((-1)^(n-1))*(2n-1)) 的值

输入描述

输入一个整数

输出描述

输出一个浮点数,保留 3 位小数

输入
1
输出
1.000

分析 1

考虑分母部分

1
1-3
1-3+5
...

分母是数组 a n = 2 n − 1 a_n = 2n - 1 an=2n1 的和,而且偶数项为负,奇数项为正

内循环把分母求出来,即可得出某一项的值,然后外循环再对每一项进行求和

参考代码 1

#include <stdio.h>

int main()
{
	int n = 0, item = 0;
	double sum = 0;
	scanf("%d", &n);
	//外循环,项求和
	for (int i = 1; i <= n; i++)
	{
		item = 0;
		//内循环,求分母
		for (int j = 1; j <= i; j++)
			item += (j % 2 == 0 ? -1 : 1) * (2 * j - 1);
		//计算该项的值并加到和里面去
		sum += 1.0 / item;
	}
	printf("%.3lf\n", sum);
	return 0;
}

分析 2

如果你输出一下每一项分母的值,就会发现

1
-2
3
-4
5

分母其实就是 i 的正负交替而已…
那我为什么还要用循环去算?

参考代码 2

//......

for(int i = 1; i <= n; i++)
{
	sum += 1.0 / (i % 2 == 0 ? -i : i); //一行足矣
}

//......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值