题解 | #牛牛学数列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.在内循环之外,外循环之内进行对刚计算好的分母进行运算 */