题解 | #牛牛学数列3#

牛牛学数列3

https://www.nowcoder.com/practice/f65c726d081c4160a9356eabf0dc21d9

#include <stdio.h>






//输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+...
// +1/(1-3+5-...((-1)^(n-1))*(2n-1))的值
//1-3+5-7+……+pow(-1,n-1)(2n-1)
double flag(int n)
{
	double sum = 0.0;
	
	for (int i = 1; i <= n; i++)
	{
		int fenmu = 0;//重置分母为0,为新的迭代做准备
		//内循环的目的就是计算出分母的大小
		for (int j = 0; j < i; j++)
		{
			fenmu += (j % 2 == 0) ? (2 * j + 1) : -(2 * j + 1);
		}//当i=2时,j执行两次循环
		/*j=0:内循环执行第一次,因为j是偶数,所以分母更新为:fenmu+(2*0+1)=1
		* j=1:分母变为1-(2*1+1)=-2
		* 计算出分母是-2后,然后外循环继续进行,sum增加1.0 / fenmu;
		* 即1/-2		
		*/
		//在内循环计算完分母的大小后,就在外循环对sum的值进行增加
		//每次进入内循环之前,在外循环之前就讲分母的值赋值为0,进行新的分母计算
		//在外循环之中,每次就将内循环计算出的数加到sum中去
		sum += 1.0 / fenmu;
	}
	return sum;
}

int main()
{
	int n;
	scanf("%d", &n);
	double sum = flag(n);
	printf("%.3f\n", sum);
	return 0;
}
//这个代码关键的几点
/*

1.两层循环之间,两层循环之间讲分母重新赋值进行新的分母计算
2.内循环中分母的计算公式:这种计算公式确保了分母是右一个交替的奇数序列构成的,其
其中正负号交替出现
3.在内循环之外,外循环之内进行对刚计算好的分母进行运算
*/

全部评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务