1. 已知正整数n的立方可以表示为n个连续奇数的和,例如:
3的3次方 = 7 + 9 + 11    (不会打那个次方数)
6的3次方 = 31 + 33 + 35 + 37 + 39 + 41
对于任意给定的正整数m,如何得到这连续m个奇数呢?

解决方案 »

  1.   

    这是一个纯数学的问题.
    假设从奇数x开始的m个奇数之和为m*m*m
    则由等差数列求和:(x+x+(m-1)*2)=m*m*m
    所以,x=m*m-m+1不用编程.
      

  2.   

    则由等差数列求和:(x+x+(m-1)*2)/2=m*m*m 
      

  3.   

    回楼上,我公式写错了,谢谢提醒,不过结果是对的:
    则由等差数列求和:m*(x+x+(m-1)*2)/2=m*m*m 
      

  4.   

    n个连续的奇数,我假设第一个奇数为x,那么第n个奇数就是x+(2n-2)
    n个连续奇数的和就等于x+(x+2)+...+(x+(2n-2)) = (x+n-1)*n(应该学过这种计算方法吧——(首项+末项)*项数/2)正整数n的立方可以表示为n个连续奇数的和就可以变成  n*n*n = (x+n-1)*n -> n*n = x+n-1 -> x=n*n-n+1 这一步就解决了import java.util.ArrayList;
    import java.util.List;public class SumTest { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    List<Integer> ret = retrieveNums(3);
    System.out.println("正整数3的立方可以表示以下为3个连续奇数的和:");
    System.out.println(ret);

    ret = retrieveNums(6);
    System.out.println("正整数6的立方可以表示以下为3个连续奇数的和:");
    System.out.println(ret);
    }

    public static List<Integer> retrieveNums(int n)
    {
    List<Integer> ret = new ArrayList<Integer>();

    int firstNum = n*n - n + 1;
    for(int i=0;i<n;i++)
    {
    ret.add(firstNum + 2*i);
    }
    return ret;
    }
    }
    但是我现在如何验证这个算法是正确的呢?
      

  5.   

    这个程序有问题的,你自己运行一下就知道了。
    ret = retrieveNums(6);
    这个参数6是错误的,这样的话就返回六个连续的奇数了,和这个意图想违背“正整数6的立方可以表示以下为3个连续奇数的和”。。