链接: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=2n−1 的和,而且偶数项为负,奇数项为正
内循环把分母求出来,即可得出某一项的值,然后外循环再对每一项进行求和
参考代码 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); //一行足矣
}
//......