首页 > 解决方案 > 名为Powers的JS任务的解决问题 - 函数和数组

问题描述

我对名为Powers的简单任务有疑问,这是条件:

数字有力量!他们可以改变自己。一种转换是通过替换来完成的:

每个 0 - 与其相邻数字的绝对差

所有其他偶数 - 与其相邻数字的最大值

每个 1 - 与其相邻数字的总和

所有其他奇数 - 其相邻数中的最小值

最左边和最右边的数字是邻居。一个序列的K -sum 是序列经过K 次变换后的数字之和。你的任务是找到给定序列的K和

输入:输入数据作为参数给出 - 一个字符串数组。在第一个输入行将有数字NK用空格分隔。在第二个输入行是N个数字 - 序列。

输出:输出应打印在控制台上。输出给定序列的K -sum

示例输入:5 1 9 0 2 4 1

解释: 9 0 2 4 1 变成 0 7 4 2 13

输出:26(0 7 4 2 13 的总和)

**这是我的代码:**

'use strict';    
function slove(args) { 
    let k = Number(args[0].split(' ')[1]); 
    let numbers = args[1].split(' ').map(Number); 

    function transform(num, left, right) { 
        if (num === 0) {
            return Math.abs(left - right);
        } else if (num % 2 === 0) { 
            return Math.max(left, right);
        } else if (num === 1) {
            return left + right; 
        } else { 
            return Math.min(left, right); 
        }
    }

    for (let i = 0; i < k; i++) {
        let currentTransformation = [];
        for (let j = 0; j < numbers.lenght; j++) { 
            let nextValue;

            if (j === 0) { 
                nextValue = transform(numbers[j], numbers[numbers.lenght - 1], numbers[1]);
            } else if (j === numbers.lenght - 1) { 
                transform(numbers[j], numbers[j - 1], numbers[0]);
            } else { 
                nextValue = transform(numbers[j], numbers[j - 1], numbers[j + 1]);             

            }

            currentTransformation[j] = nextValue;

        }
        numbers = currentTransformation;
    }

    let sum = 0;
    for (let num of numbers) {
        sum += num;
    }
    console.log(sum);
}

slove([ 
    '5 1',
    '9 0 2 4 1'
]);

所以console.log(sum) 需要返回26,但它返回0...我找不到我的代码的问题在哪里。

标签: javascriptarraysnode.jsfunction

解决方案


您的代码有两个问题:

  • 你的数组长度有错别字——它的length,不是lenght
  • 您忘记将最后一个值保存在if (j === numbers.length - 1)块中

'use strict';

function solve(args) {
  let k = Number(args[0].split(' ')[1]);
  let numbers = args[1].split(' ').map(Number);

  function transform(num, left, right) {
    if (num === 0) {
      return Math.abs(left - right);
    } else if (num % 2 === 0) {
      return Math.max(left, right);
    } else if (num === 1) {
      return left + right;
    } else {
      return Math.min(left, right);
    }
  }

  for (let i = 0; i < k; i++) {
    let currentTransformation = [];
    for (let j = 0; j < numbers.length; j++) {
      let nextValue;

      if (j === 0) {
        nextValue = transform(numbers[j], numbers[numbers.length - 1], numbers[1]);
      } else if (j === numbers.length - 1) {
        nextValue = transform(numbers[j], numbers[j - 1], numbers[0]); // HERE
      } else {
        nextValue = transform(numbers[j], numbers[j - 1], numbers[j + 1]);
      }

      currentTransformation[j] = nextValue;
    }

    numbers = currentTransformation;
  }

  let sum = 0;
  for (let num of numbers) {
    sum += num;
  }
  console.log(sum);
}

solve([
  '5 1',
  '9 0 2 4 1',
]);


推荐阅读