C语言数列求和(for循环)

img

img

img


第二张图片的代码为什么要改成第三张图片中的代码?(即为啥多定义一个j、多一个关于j的内嵌、把第二张图片第15行代码中的i换成j)

比如n=3
an=sn=123=6

n=4
an有两个值,a3和a4
a3=123
a4=123+234=30
sn=a3+a4

n=5
an有3个
a3=!23
a4=!23+234
a5=!23+234+345
sn=a3+a4+a5
所以根据题目,图二是正确的代码
是读题的思路问题
图2我们认为an=sn
而根据图3,我们认为sn为n-2个an的总和
所以第一层i循环是n-2项
第二层j循环是an,每一个an有j-2项
比如n=5
i=3;i<=5;i++
总共3项
j=3;j<=5-i+3;j++

当i=3时
j=3;j<=5;j++
an=0+321
sn=0+an
an=0

j=4;
an=0+432
sn=an+sn=432+321
an=0

j=5
an=543
sn=an+sn=543+432+321

也就是i=3的时候计算的是
a5=543+432+321

当i=4
j=3;j<=4;j++
an=0+321
sn=0+an
an=0

j=4;
an=0+432
sn=an+sn=432+321
an=0

也就是i=4的时候计算的是
a4=432+321

i=5时
j=3;j<=3;j++
an=0+321
sn=0+an
an=0

也就是i=5的时候计算的是
a3=321

而sn=s5=a3+a4+a5

OK,有点绕,大概就是这么个意思,或许自己写代码更容易理解吧

修改如下,供参考:

#include <stdio.h>
int main()
{
    long long int Sn = 0;
    int  n, i;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        Sn += (i - 2) * (i - 1) * i;
    printf("%lld", Sn);
    return 0;
}