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

时间:2010-07-14 19:14:36

标签: 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;
}

10 个答案:

答案 0 :(得分:10)

  1. 您没有初始化sum。使用0初始化它。
  2. 您不应该在每一步添加n,而是j
  3. 当然,这是为了修复您当前的代码。有更好的方法来解决这个问题,其他人已经提到过。

    修改

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

    您的总和等于n*(n + 1)*(2*n + 1) / 12 + n*(n + 1) / 4

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

答案 1 :(得分:9)

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

1 + (1+2) + (1+2+3) + ... + (1+2+3+...+n)

等于

1*n + 2*(n-1) + 3*(n-2) + ... + n

答案 2 :(得分:5)

不是您的预期,但 是最佳解决方案;)

int calculate (int n) {
  return (2*n + 3*n*n + n*n*n) / 6;
}

答案 3 :(得分:1)

想一想。你有一个总和,你有一系列的价值。通过添加索引,可以从前一个值生成每个值。那你为什么要嵌套循环?

答案 4 :(得分:1)

迭代地做,就像你尝试过的那样:

#include <stdio.h>

int main() {
    int i, t, n, sum;
    printf("Please enter an integer, n = ");
    scanf("%d", &n);
    t = sum = 0;
    for (i = 1; i <= n; ++i) {
        t += i;
        sum += t;
    }
    printf("sum = %d\n", sum);
    return 0;
}

但是,正如IVlad建议的那样,有一个封闭形式的公式。

答案 5 :(得分:0)

您永远不会初始化sum,因此您要将所有内容添加到随机垃圾值中。在你的循环之前粘贴sum = 0;

答案 6 :(得分:0)

从数学开始,看看你是否能找到一些模式。

if n = 0 , res = 0?
if n = 1 , res = 1
if n = 2 , res = 1 + (1+2) 
if n = 3 , res = 1 + (1+2) + (1+2+3)

对于每个n,res是??

答案 7 :(得分:0)

试试这个:

int main(void)
 {
   int total=1;
   int sumtotal = 0;
   int n=5;

   for(int i=1; i<=n; i++)
     {
       total+=i;
       sumtotal+=total;
     }
   //sumtotal should give you 1+(1+2)+(1+2+3)
   return 0;
 }

答案 8 :(得分:0)

尝试:

int main(void)
{
    int     n, sum;

    printf("\nPlease enter a postive integer value");    
    scanf("%d", &n);
    sum = n * ( n + 1 )/ 2;
    printf("\n%d", sum);
    return 0;
}

答案 9 :(得分:-1)

n *(n - (n - 1))

int n, sum 

for n = 0; n <= 3; n ++ {
    sum += n * (n -(n - 1))
 }

也适用于阶乘(更改运算符并将总和设置为1):

int n, sum 

sum = 1

for n = 0; n <= 3: n++{
    sum *= n * (n -(n -1))
}