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

题目:
任何一个自然数m的立方均可写成m个连续奇数之和。
例如: 1^3=1    2^3=3+5
   3^3=7+9+11  4^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<Integer> ret=new ArrayList<Integer>();
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;i<n/2;i++){
ret.add(toAdd);
ret.add(toSub);
toAdd+=2;
toSub-=2;
}
}
Object[] tempRet=ret.toArray();
Arrays.sort(tempRet);
for(int i=0;i<tempRet.length;i++){
System.out.print(tempRet[i]+" ");
}
}

有其他想法的同学可以一起讨论.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章