Решение проблемы с задачей JS с именем Powers - функции и массивы - PullRequest
0 голосов
/ 29 ноября 2018

У меня проблема с простой задачей с именем Полномочия Вот условие:

Числа имеют Силы!Они могут трансформироваться.Одно преобразование выполняется путем замены:

каждого 0 - абсолютной разностью соседних чисел

всех остальных четных чисел - максимумом соседних чисел

каждого 1- с суммой соседних чисел

всех других нечетных чисел - с минимумом соседних чисел

Самые левые и самые правые числа являются соседями. K -сумма последовательности представляет собой сумму чисел после K преобразований последовательности.Ваша задача - найти K -сумму заданной последовательности

Ввод: входные данные задаются как параметр - массив строк.На первой строке ввода будут номера N и K , разделенные пробелом.Во второй строке ввода находятся N число - последовательность.

Вывод: Вывод должен быть напечатан на консоли.Выведите K -сумму данной последовательности

Пример : Ввод : 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 ... Я не могу найти, в чем проблема моего кода.

1 Ответ

0 голосов
/ 29 ноября 2018

В вашем коде было 2 проблемы:

  • у вас была опечатка длиной массива - это 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',
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...