用c语言计算S=1-2+3-4+5-6+...+/-N,时间复杂度为O(1)

用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));
    }
};

img

这里让时间复杂度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是偶数

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632