写程序执行sum = 1+(1 + 2)+(1 + 2 + 3)+ ... +(1 + 2 ... + n)

0 c

我无法正确使用代码.有人可以帮忙吗?

#include<stdio.h>
int main()
{
 int n, sum,i,j;

 printf("Please enter an integer, n = ");
 scanf("%d", &n);

 for(i=1;i<=n;i++)
     for(j=1;j<=i;j++)
         sum = sum + n;
 printf("sum = %d", sum);


 return 0;
}
Run Code Online (Sandbox Code Playgroud)

IVl*_*lad 10

  1. 你没有初始化sum.用它初始化它0.
  2. 你不应该n在每一步添加,但是j.

当然,这是为了修复您当前的代码.有更好的方法来解决这个问题,其他人已经提到过.

编辑:

只是为了好玩,这是一个允许您解决问题的公式O(1):

你的金额等于n*(n + 1)*(2*n + 1) / 12 + n*(n + 1) / 4.

这是通过将其写为总和并使用第一个n连续正方形n(n + 1)(2n + 1) / 6的总和和第一个n正正整数之和的事实得到的n(n + 1)/2.如果您能找到更好的公式,请+1.


Tim*_*ker 9

不需要递归,只需看看数学:

1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)
Run Code Online (Sandbox Code Playgroud)

等于

1*n + 2*(n-1) + 3*(n-2) + ... + n
Run Code Online (Sandbox Code Playgroud)

  • 如果沿着这条路走下去,你也可以打印出'n*(n + 1)*(n + 2)/ 6` (4认同)

zvo*_*one 5

不是你的预期,但这最好的解决方案;)

int calculate (int n) {
  return (2*n + 3*n*n + n*n*n) / 6;
}
Run Code Online (Sandbox Code Playgroud)