自然数m的立方可写成m个连续奇数之和

题目:
任何一个自然数m的立方均可写成m个连续奇数之和。
例如: 1^3=12^3=3+5
3^3=7+9+114^3=13+15+17+19
编程实现:输入一自然数n,求组成n3(立方)的n个连续奇数

分析:
先找到平衡点,平衡点是n的平方(n*n);
n为奇数时,结果包含平衡点;结果:...n-6,n-4,n-2,n,n+2,n+4,n+6...
特殊的是中间3个数:n-2,n,n+2
n为偶数时,结果不包含平衡点;结果:...n-5,n-3,n-1,n+1,n+3,n+5...
特殊的是中间的2个数:n-1,n+1
处理好中间特殊的数时,计算两边的数就容易了;见如下代码:


//找到奇数并打印出
public static void findOdd(int n){
List ret=new ArrayList();
if(n<0){
ret.add(0);
}else if(n==1){
ret.add(1);
}else{
int tempSum=n*n; //计算平方
int toAdd=tempSum;
int toSub=tempSum;
if(tempSum%2==1){ //是奇数,说明是平衡点
toAdd+=2; //此处加减2
toSub-=2;
ret.add(tempSum); //先添加这个奇数
}else {
toAdd+=1; //此处加减1
toSub-=1;
}
for(int i=0; iret.add(toAdd);
ret.add(toSub);
toAdd+=2;
toSub-=2;
}
}
Object[] tempRet=ret.toArray();
Arrays.sort(tempRet);
for(int i=0; iSystem.out.print(tempRet[i]+" ");
}
}


有其他想法的同学可以一起讨论.

    推荐阅读