正整数n的立方可以表示为n个连续奇数的和,如何实现

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

有没发现规律同学,
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 这一步就解决了

[code="java"]
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;
}

}

[/code]

[b]写了一个Java的实现,你可以直接调用Jisuan方法。参数是你需要得到结果的正整数。[/b]
[code="java"]
public class Test {

public static void main(String[] args) {
    System.out.println(Jisuan(10));
}

public static String Jisuan(int sz) {
    String str = "";

    if (sz < 0)
        return "0";
    if (sz == 1) 
        return "3";
    if (sz == 2) 
        return "1 + 3 + 5";

    int count = sz;
    int from = sz * sz - (sz - 1);

    while (count > 0) {
        str += from + " + ";
        from += 2;
        count--;
    }
    str = str.substring(0,str.length()-2);

    return str;
}

}
[/code]

我的解题思路是这样的:
1.先把排列几组数字,以便从中发现规律

  • 1_3 = 3; (1的3次方)
  • 2_3 = 1 + 3 + 5;
  • 3_3 = 7 + 9 + 11; from:[3*3-2 or 3*2+1]
  • 4_3 = 13 + 15 + 17 + 19; from n*n-(n-1)
  • 5_3 = 21 + 23 + 25 + 27 +29; form n*n-(n-1) wei:n
  • 6_3 = 31 + 33 + 35 + 37 +39 + 41;

2.发现规律,通过上面几组数,我发现从3开始便有了规律
规律1:第一个数字总是为:n*n-(n-1)
规律2:他们中总存在n个数字相加
3.下面便是代码编写了。
[code="java"]

function jisuan(sz){ var str = ""; if (sz < 0) return "0"; if (sz == 1) return "3"; if (sz == 2) return "1 + 3 + 5"; var count = sz; var from = sz * sz - (sz - 1); while (count > 0) { str += from + " + "; from += 2; count--; } str = str.substring(0, str.length-2); return str; } // 计算17 document.writeln(jisuan(17));

[/code]