永发信息网

设计一个函数,计算s=1-2+3-4+5-6+…±N的值,要求时间复杂度为O(1),越简洁独特越好

答案:5  悬赏:0  手机版
解决时间 2021-03-21 21:09
设计一个函数,计算s=1-2+3-4+5-6+…±N的值,要求时间复杂度为O(1),越简洁独特越好
最佳答案
可以用公式的
观察到
1-2=-1
3-4=-1
5-6=-1
如果n是奇数的话
答案是-(n-1)/2+n
如果N是偶数的话答案是-n/2

#include
#include
int sum(int n)
{
if(n%2==1)return -(n-1)/2+n;
else return -n/2;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",sum(n));
return 0;
}
全部回答
int fun(int s,int i){//主函数中调用的时候要s=0,i=0;
if(i<100000){
i++;
s+=i
s=fun(s,i);
}
else{
return s;
}
return s;
}
化简表达式:
s = 1-2+3-4+5-6+...±N
=(1-2)+(3-4)+(5-6)...(N-1-N) =-1-1-1-1-1...-1=-N/2 (N为偶数)
=(1-2)+(3-4)+(5-6)...+N = -1-1-1-1-1-1...-1+N=-(N-1)/2+N=N/2+1/2=(N+1)/2 (N为奇数)
则可得以下函数:
int function(int nT)
{
return ((nT%2)?((nT+1)/2):(-nT/2));
}
那么从函数来看,function中nT%2步数为1,后面的两个算式均为1,而两个算是只会执行一个,return步数为1,那么function的步数为3,时间复杂度为T(function) = O(1),符合要求
sum = (0 - (n >> 1)) - ((n & 0x01) ? n : 0);
1楼的有点问题,中间应该是加
sum = (0 - (n >> 1)) + ((n & 0x01) ? n : 0);
1楼的是最标准的答案了,一看就知道C的功底相当厉害。
只可惜楼主没采纳。遗憾。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
日版苹果5加卡贴机升级iOS7 系统插上充电器充
冰岛音乐火吧地址在哪,我要去那里办事
大班幼儿评语上学期,幼儿散文诗(传统文化)
一万日元在日本人眼里算不算钱
艺术真实性问题漫议童庆炳阅读答案
三星c10pro最新消息
我喜欢在殡仪馆工作,请问在北京哪有这样的工
汽车驱动桥通过悬架机构与什么连接
求好看的现代温馨文!
时空之轮2.1卡怪卡久了出现储存空间不足怎么
rpg maker xp 如何转成app
世界上最大的岛屿是格陵兰岛,面积约有217万k
教育巷地址在什么地方,想过去办事
谁能推荐一下,可以两个或多个人一起玩的游戏
魔兽争霸侏罗纪公园里坦克怎么装武器?
推荐资讯
单选题选出下列各组词语中都有错别字的一项A.
改版荆轲要出什么装备,王者荣耀荆轲出什么装
茄子属碱性还是酸性
以腾开头的成语接龙。
sante dicom viewer标志怎么去掉
海南海口食堂刷卡机 售饭机哪里买 就是食堂就
品牌的电动自行车中哪种安全性能最好
美剧斯巴达克斯里面,后来甘尼克斯有没有给梅
莘度宾馆在什么地方啊,我要过去处理事情
关描写夏季的优美语句,有关红酒,咖啡的优美
中乐百花酒店-中餐厅地址在哪,我要去那里办
单选题916年,耶律阿保机统一契丹各部,建立
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?