【JavaScript——牛客网算法No.HJ76】验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

  • @No.HJ76 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

  • @problem description:
    验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。例如:
    1^3=1
    2^3=3+5
    3^3=7+9+11
    4^3=13+15+17+19
  • @input description:
    输入说明
    输入一个int整数
  • @output description:
    输出分解后的string

  • 示例

  • @input:
    6
  • @output:
    31+33+35+37+39+41
while(n = readline()){
    
    
    var arr = [];
    let one = Math.pow(n,2);
    if(one % 2 != 0){
    
    
        arr.push(one);
        for(var i=1;i<=(n-1)/2;i++){
    
    
            arr.push(one + i * 2)
            arr.unshift(one - i * 2)
        }
    }else{
    
    
        for(var i=0;i< n/2;i++){
    
    
            arr.push(one + 1 + i * 2)
            arr.unshift(one - 1 - i * 2)
        }
    }
    console.log(arr.join("+"));
}
算法分析:

经典数学问题:
运用到了数学指数运算方法:Math.pow(底数,指数) 比如:Math.pow(3,2) = 9
之后分析其中的数学规律:我们可以先找到结果数列的中间值:底数的平方。
这个中间值会存在奇偶两种情况:
① 底数的平方(one)为奇数:
直接先把one的值加入结果数组(arr)中,之后再循环(n-1)/2次,每次循环都在数组中加上已有奇数列最近的前一项和后一项;
以5为例:
one = Math.pow(5,2)
// 25
arr = [25];
arr = [23,25,27];
arr = [21,23,25,27,29];
② 底数的平方(one)为偶数:
直接循环n/2次,每次循环也是在数组中加上已有奇数列最近的前一项和后一项;


Code_Zevin_J —— 2020-08-25 21:01:13

猜你喜欢

转载自blog.csdn.net/JZevin/article/details/108228903