目前主要分为三个专栏,后续还会添加:
感谢阅读!
初来乍到,如有错误请指出,感谢!
描述
牛牛开始学习数列啦
现在他想知道1-2+3-4...+n的值
输入描述:
输入一个整数n (1≤𝑛≤1001≤n≤100)
输出描述:
输出一个整数
示例1
思路 :
题目中的数列公式 "1-2+3-4...+n" 表示一个交替正负号的数列,其中每个数字都是连续的自然数,但正负号根据数字的奇偶性交替变化。具体来说,数列的规律如下:
- 第一个数字是 1,是正数。
- 第二个数字是 2,是负数。
- 第三个数字是 3,再次是正数。
- 第四个数字是 4,是负数。
以此类推,直到给定的数 n。
因此,数列的前几项是这样的:
- 当 n = 1 时,数列为 1。
- 当 n = 2 时,数列为 1 - 2。
- 当 n = 3 时,数列为 1 - 2 + 3。
- 当 n = 4 时,数列为 1 - 2 + 3 - 4。
题目要求计算这个数列到 n 项的和。
为了计算这个数列的和,我们可以观察到一个规律:每两个连续的整数(一个正数和一个负数)的和是 -1。例如:
- 1 - 2 = -1
- 3 - 4 = -1
如果 n 是奇数,那么最后一个数是正数,整个数列的和将是 -(n/2) + n(因为前 n/2 对连续整数的和是 -1,而第 n 个数是正数)。 如果 n 是偶数,那么最后一个数是负数,整个数列的和将是 -(n/2)。
我们可以用数学公式来表示这个规律:
确定项数:首先,我们需要确定数列中有多少项。这个数量由输入的整数 n
决定。
计算对数:由于每对连续的正负数相加等于 -1,我们可以通过计算 n
中有多少对这样的连续项来确定数列和的主要部分。如果 n
是奇数,那么会有一个剩余的正数项;如果 n
是偶数,则所有项都成对。
应用公式:根据上述规律,我们可以得出以下公式来计算数列的和:
其中 //
表示整数除法,结果也是整数。
如果 n
是奇数,则数列的和为 -(n // 2) + n
,因为前 n // 2
对连续整数的和是 -1
,而第 n
个数是正数。
如果 n
是偶数,则数列的和为 -(n // 2)
,因为所有项都成对,每对的和为 -1
。
代码 1 :
#include <stdio.h> // 包含标准输入输出流库,用于程序中的输入输出操作。
#include <math.h> // 包含标准数学库,这里用于调用pow函数来计算幂。
int value(int n) // 定义一个名为value的函数,它接收一个整数参数n。
{
int sum = 0; // 在函数内部定义一个名为sum的整型变量,并初始化为0,用来累积数列的和。
// 使用for循环遍历从1到n(包括n)的每个整数i。
for(int i = 1; i <= n; i++)
{
// 对于每次循环,计算i乘以(-1)的(i+1)次方,这个结果决定了i的正负号。
// pow(-1, (i+1))的计算结果根据(i+1)是奇数还是偶数来决定,奇数为-1,偶数为1。
// 将这个结果与i相乘,然后加到sum上,从而累积数列的和。
sum = i*pow(-1, (i+1)) + sum;
// 下面的注释掉的代码是另一种写法,与上面的非注释代码功能相同,但被注释掉了,所以不会执行。
// sum += i*pow(-1,(i+1)); // 这行代码通过使用+=操作符来简化sum的更新,效果与上面的sum = ...相同。
}
return sum; // 在循环结束后,返回累积的数列和。
}
int main()
{
int n = 0; // 在main函数中定义一个名为n的整型变量,用来存储用户输入的整数。
// 使用scanf函数从标准输入读取一个整数,存储到变量n中。
// %d是格式说明符,表示期望读取的是一个整数。
scanf("%d", &n);
// 调用value函数,将用户输入的整数n作为参数传递给该函数。
// value函数将计算数列1-2+3-4...+n的和。
// 然后,使用printf函数将计算得到的和打印出来。
// %d是格式说明符,告诉printf函数期待输出的是一个整数。
printf("%d\n", value(n));
return 0; // main函数返回0,表示程序正常结束。
}
代码 2 :
#include<stdio.h>
int main()
{
int n=0,i=0,j=0;;
scanf("%d",&n);
i=n/2;
j=n%2;
if(j==0)
//j=0代表为偶数,则全部抵消;
{
printf("%d",-i);
}
else
//j=1代表为奇数,加上n;
{
printf("%d",n-i);
}
}
代码 3 :
#include <stdio.h>
int calculate_sequence_sum(int n) {
// 使用整数除法计算对数,即连续整数对的数量
int pairs = n / 2;
// 如果n是奇数,需要加上最后一个单独的正数项
if (n % 2 != 0) {
return -pairs + n;
} else {
// 如果n是偶数,所有项都成对,直接计算对数的相反数
return -pairs;
}
}
int main() {
int n;
printf("请输入整数n (1≤n≤1001): ");
scanf("%d", &n); // 从用户那里读取输入的整数n
int result = calculate_sequence_sum(n);
printf("数列1-2+3-4...+%d的和为: %d\n", n, result);
return 0;
}
知识点 :C 库函数 - pow()
描述
C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
声明
下面是 pow() 函数的声明。
double pow(double x, double y)
参数
- x -- 代表基数的浮点值。
- y -- 代表指数的浮点值。
返回值
该函数返回 x 的 y 次幂的结果。
实例
下面的实例演示了 pow() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
printf("值 8.0 ^ 3 = %lf\n", pow(8.0, 3));
printf("值 3.05 ^ 1.98 = %lf", pow(3.05, 1.98));
return(0);
}
让我们编译并运行上面的程序,这将产生以下结果:
值 8.0 ^ 3 = 512.000000
值 3.05 ^ 1.98 = 9.097324