自然数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]+" ");
}
}

有其他想法的同学可以一起讨论.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值