日期:2014-05-20  浏览次数:20642 次

提问:java简单题
1-2+3-4+5-6+...+n的java实现?
  我的答案:public   static   int   add(int   n){
int   b   =   n/2;
int   a   =   n%2;
if(a==0){
return   -b;
}else   return   -b+n;
}
  可经理说不行,望达人指点!

------解决方案--------------------
public static void add(int n){
int sum=0;
for(int i=1;i <=n;i++){
if(i%2==0){
sum=sum-i
}else{
sum=sum+i;
}
}
}
------解决方案--------------------
算法问题
------解决方案--------------------
同上 算法问题
------解决方案--------------------
我觉得lz的做法很精辟啊

如果我是项目经理,我一定重用你。
------解决方案--------------------
考察的是算法,而不是数学能力
如果真的是实际运用,楼主你方法当然更好
------解决方案--------------------
编程也不能只看算法,也要考虑效率。我觉得LZ的方法挺好。
------解决方案--------------------
if (n%2==0)
{
k=-(n/2);
}
else
{
k=(n+1)/2;
}
------解决方案--------------------
hehe


------解决方案--------------------
楼主的方法不错,不过效率还可以稍改进一下
------解决方案--------------------
其实lz的效率应该是最好了,如果代码还要简洁点
return n%2*n-n/2;
------解决方案--------------------
搂住希望复杂问题简单化。
经理希望简单问题复杂化。
------解决方案--------------------
楼主的方法好,你经理是个呆瓜,鉴定完毕。
------解决方案--------------------
if(n % 2)
return -((n > > 2) + 1);
else
return -(n > > 2);
楼上的是呆瓜 坚定完毕。
------解决方案--------------------
假如我是项目经理,我也会叫你重做,楼主可要加油啊,你连最基本的编程原则都不知道,
你看你写的程序,当我取n值为1时会怎么样,你想肯定会输出1,结果你的程序只会输出1/2,奇怪吧,1%2=1,执行-b+n;如果这段代码被用到你们公司的软件中去,会让QA疯掉,
这就是编程的边界值原则,每编写一段代码,一定要查看它的边界值,建议看一下软件测试方面的书.
------解决方案--------------------
不知道楼上的是怎么讨论的,经理的意思很明确,
让你用计算机实现这个序列的求和,而不是计算这个序列。

就好比让你计算5!,你编程打印5×4×3×2×1是不对的,应该用递归。
javaalix()朋友的编程是正确的。
------解决方案--------------------


考的是过程,不是结果。