@Lite_robot

Как 4+5 может быть равно 7?

Дан массив с числами arr, в котором необходимо найти комбинации чисел суммой которых является arg. И вернуть сумму их индексов. Комбинации не должны повторятся. Был написан такой код:

function pairwise(arr, arg) {
  var res = 0;
  var pairs = [];
  var FindPair = function(a1){
    if(pairs.length){
      for(i = 0; i < pairs.length; i++){
          if(pairs[i] === a1){
            return false;
          }
      }
    }
      return true;
  };
  for(i = 0; i < arr.length-2; i++){
    for(j = i+1; j < arr.length; j++){
      if(arr[i] + arr[j] === arg){ //4 + 5 == 7 //true
        if(FindPair(arr[i]+'+'+arr[j])){ //проверяет наличие комбинации
          pairs.push(arr[i]+'+'+arr[j]);//добавление комбинации
          res += i + j;
        }
      }  
    }
  }
  return res;
}

pairwise([1, 4, 2, 3, 0, 5], 7);


который при выполнении pairwise([1, 4, 2, 3, 0, 5], 7) допускает условие, что 4 + 5 == 7, а при pairwise([0, 0, 0, 0, 1, 1], 1) уходит в бесконечный цикл, чего быть не должно. Подскажите в чем ошибка?
  • Вопрос задан
  • 417 просмотров
Решения вопроса 1
alsopub
@alsopub
Вы внутри функции FindPair крутите цикл по i, чем сбиваете работу основного цикла по i, j.
Достаточно заменить
for(i = 0; i < pairs.length; i++)
на
for(var i = 0; i < pairs.length; i++)

UPD. Как верно заметил Stalker_RED нужно еще поправить индекс:
for(i = 0; i < arr.length-1; i++){
  ...
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы