首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS任务-函数和数组的解决方案

JS任务-函数和数组的解决方案
EN

Stack Overflow用户
提问于 2018-11-29 17:20:37
回答 1查看 36关注 0票数 0

我对一个名为Power的简单任务有问题,这里的条件是:

数字有超能力!他们可以改变自己。一个转换是通过替换:

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

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

每个1与其相邻数之和

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

最左边和最右边的数字是邻居。序列的K-sum是序列K变换后的数之和。您的任务是查找给定序列的K-sum。

输入:输入数据作为一个参数-一个字符串数组。在第一输入行中,将有数字、N、K,用空格分隔。在第二条输入线上是N数字--序列.

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

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

Explanation:9 0 2 4 1变为0 7 4 2 13

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

**这是我的代码:**

代码语言:javascript
复制
'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(和)需要返回26,但它返回0.我找不到我的代码问题在哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-29 18:02:10

您的代码有两个问题:

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

代码语言:javascript
复制
'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',
]);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53544415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档