用c语言计算S=1-2+3-4+5-6+...+/-N,时间复杂度为O(1)
每相邻两个数的和为-1
示例代码如下有帮助望采纳~
#include <stdio.h>
int naive(int n)
{
int flag = 1;
int result = 0;
for (int i = 1; i <= n; i++)
{
result += i * flag;
flag *= -1;
}
return result;
}
int fast(int i)
{
return (i / 2 * -1 + ((i % 2) ? i : 0));
}
int main(int argc, char const *argv[])
{
for (int i = 0; i < 10; i++)
{
printf("%d %d\n", naive(i), fast(i));
}
};
这里让时间复杂度O(1),所以应该是让你把这个式子优化,这明显一看1~n 一个加一个减的,
分奇数和偶数处理, n如果为奇数,是不是就是 n/2+n; n如果为偶数,结果是n/2
这就是个数学题把~
if(N%2==1) S=1+N/2; //N是奇数
else S=-N/2; //N是偶数