int start=1,end=100;//定义开始和结束的数值(这里是1-100)
printf("%lf",((end-start+1)%2==0)?((end+start)*(end-start+1)/2/(double)(end-start+1)):(((end+start)*(end-start)/2+(end-start)/2)+(end%2?1:2))/(double)(end-start+1));
这个算法比较另类;优点是运算速度快.相比较其他人的算法,运算100个数相加平均数,效率是他们用循环相加的80倍左右.也就是假设用循环相加的算法需要100毫秒完成.上面的代码只需要1毫秒多点;
并且运算的范围越大;效率相比越明显,因为他不管多少个数,运算时间都一样;缺点是难以理解;
上面代码这么长,是考虑2-100或者1-99这种数的个数不是成对的情况;
如果可以保证数的个数是成对的只需要
int start=1,end=100;
printf("%lf",(((end+start)*(end-start+1)/2/(double)(end-start+1)));
这个效率是循环相加运算速度的100倍左右;
再变态一下....
如果只算1-100这个固定的累加平均数...
只需要
printf("%d",(1+100)*100/2/100);
简化下就是......
printf(%d,50);//口算就出来了
好吧 我已经很邪恶了;
温馨提示:内容为网友见解,仅供参考