C语言 1+(1-2)+(1-2+3)+(1 - 2+3-n)...的和,其中偶数为-k,奇数为+k

oprakyz7  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(126)

我想写一个程序,用户告诉我一个整数(n),我计算1+(1-2)+(1-2+3)+(1 - 2+3-n).. a的和,其中偶数是-k,奇数是+k。
我做了一个函数,但是和永远不正确。例如,对于n=2,它应该是sum=0,但是显示sum=-1对于n=3,它应该是sum=+2,但是i显示sum=3。(忽略调试printfs)

#include <stdio.h>

int athroismaAkolouthias(int n); // i sinartisi me tin opoia ypologizete to athroisma akolouthias 1+(1-2)+(1-2+3)+(1-2+3-4).....

int main(){
    int n;
    printf("give n: ");
    scanf("%d", &n);
    printf("the sum is %d", athroismaAkolouthias(n));
}

int athroismaAkolouthias(int n){
    int sum1=0, sum2=0,sum=0;
    int i, temp, j;
    for (i=1; i<=n; i++){
        for (j=1; j<=i; j++){
            temp=j;
        }
        if (i%2==0){sum=sum-temp; printf("test1 %d%d",sum,temp);}
        else{sum=temp; printf("test2 %d%d",sum,temp);}
    }
    return sum;
}
v8wbuo2f

v8wbuo2f1#

您的问题与我们的循环有关,该循环迭代j,它应根据j偶/奇条件更新inner_sum,如下所示:

#include <stdio.h>

int akl(int n) {
  int sum = 0;

  for (int i = 1; i <= n; i++) {
    int inner_sum = 0;
    for (int j = 1; j <= i; j++) {
      if (j % 2 == 0) {
        inner_sum -= j;
      } else {
        inner_sum += j;
      }
    }
    sum += inner_sum;
  }

  return sum;
}

int main() {
  int n;

  scanf("%d", &n);

  printf("%d\n", akl(n));
}

对于sum,只需要两个变量,我将它们命名为inner_sumsum,它显示了每一项的和以及所有项的和。

lpwwtiir

lpwwtiir2#

可疑行:else {sum = temp; ...
你不应该每次都对sum进行加减运算吗?
你为什么在这里赋值,不加不减?
还有变量sumsum1sum2。可以打印sum1sum2,但不能修改它们。
我的解决方案是:

// The sum of 1+(1-2)+(1-2+3)+(1-2+3-n)... where even integers are -k and odd integers are +k.
#include <stdio.h>

int ancho(int n)
{
    int sum=0;
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<=i; ++j)
        {
            sum += (2*(j%2)-1)*j;
        }
    }
    return sum;
}

int main(void)
{
    int n = 5;
    
    printf("Solution is %d\n", ancho(n));
}

// Solution is 3 for n = 5, 
// because: 1 + (1-2) + (1-2+3) + (1-2+3-4) + (1-2+3-4+5) = 
// 1-1+2-2+3 = 3

输出

Success #stdin #stdout 0s 5476KB
Solution is 3

IDEOne Link的第一个字符

相关问题