奇忠诚 发表于 2017-7-10 11:24:08

华为OJ之尼科彻斯定理

  题目详情:
  验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
  例如:
  1^3=1
  2^3=3+5
  3^3=7+9+11
  4^3=13+15+17+19
  输入:一个整形数字
  输出:分解后的string
  示例输入:6
  示例输出:31+33+35+37+39+41
  题目分析:
  本题实质上是一个数学定理,我们暂且来用数学知识来验证其正确性:
1, 对于任一正整数n > 0,不论n是奇数还是偶数,整数(n*n-n+1)必然为奇数。
2, 构造一个等差数列,其中首项为(a×a-a+1),差值为2,则前n项的和为:
a*((n*n-n+1))+2*n(n-1)/2 = n^3;
故定理成立。

则题目便转化为特定数字序列的输出问题了。
  代码实现(Java实现):



import java.util.Scanner;

public class NichestPrinciple {
   public static void main(String[] args) {
         System.out.println(verifyNichest(getInput()));
   }

   public static int getInput() {
         @SuppressWarnings("resource")
         Scanner reader = new Scanner(System.in);
         return reader.nextInt();
   }
   
   public static String verifyNichest(int n) {
         StringBuffer sBuffer = new StringBuffer();
         for (int i = 0; i < n; i ++) {
             sBuffer.append(String.valueOf((n * n - n + 1 + 2 * i)));
             if (i != n - 1) {
               sBuffer.append("+");
             }
         }
         return sBuffer.toString();
   }
}
页: [1]
查看完整版本: 华为OJ之尼科彻斯定理