我无法正确使用代码。 有人可以帮忙吗?
#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;
}
答案 0 :(得分:10)
sum
。使用0
初始化它。n
,而是j
。当然,这是为了修复您当前的代码。有更好的方法来解决这个问题,其他人已经提到过。
修改强>:
只是为了好玩,这是一个允许您在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))
}