gpt4 book ai didi

c - 101 到 201 之间的奇数之和

转载 作者:行者123 更新时间:2023-11-30 19:02:37 25 4
gpt4 key购买 nike

我想用 C 语言编写一个程序,它将打印从 101 到 201 的所有奇数的总和。请帮忙。

int i,t,s;
i=101;
s=0;
while(i<=201)
{
t=i+2;
s=s+t;
i+=2;
}
printf("sum is %d",s);

最佳答案

正在做

int i,t,s;
i=101;
s=0;
while(i<=201)
{
t=i+2;
s=s+t;
i+=2;
}
printf("sum is %d",s);

您求和的第一个值是 i+2101+2是 103,所以您错过了添加 101

当然有一种方法可以纠正它,用 101 而不是 0 来初始化 s,但是可以简化代码并使其更具可读性,例如:

int s = 0;

for (int i = 101; i <= 201; i += 2)
s += i;
<小时/>

但是像这样的连续剧可以有一个公式

我们想要101+103+105+...+201这是(1+3+5+...+201) -(1+3+5+...+99)所以如果我们知道如何计算 1+3+5+...+(2*n+1)如果没有循环,我们也可以在没有循环的情况下计算期望值。

  • 我们都知道1+2+3+...+nn*(n+1)/2

  • 我们实际上想要 1+2+3+4+...+(2*m+1) - (2+4+6+8+...+(2*m))

  • 2+4+6+8+...+(2*m)2*(1+2+3+...+m)

  • 最后1+3+5+...+(2*m+1)(2*m+1)*(2*m+2)/2 - 2*m*(m+1)/2

因此,要计算 2 个奇数(此处为 101 和 201)之间的值,程序可以是:

#include <stdio.h>

int sumOdd(int m)
{
m /= 2; /* m in my formula */
return (2*m+1)*(2*m+2)/2 - 2*m*(m+1)/2;
}

int main(int argc, char ** argv)
{
int n1, n2;

if (argc != 3)
printf("Usage: %s <odd1> <odd2>", *argv);
else if ((sscanf(argv[1], "%d", &n1) != 1) ||
(sscanf(argv[2], "%d", &n2) != 1) ||
(n1 < 1) ||
((n2 - n1) < 2) ||
((n1 & n2 & 1) != 1))
fprintf(stderr, "wrong values %d %d\n", n1, n2);
else
printf("%d\n", sumOdd(n2) - sumOdd(n1 - 2));

/* use the loop to check the formula result */
int s = 0;

for (int i = n1; i <= n2; i += 2)
s += i;
printf("%d\n", s);
}

编译与执行:

pi@raspberrypi:/tmp $ gcc -g -pedantic -Wall -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out 101 201
7701
7701

有效!

关于c - 101 到 201 之间的奇数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com