Решение: Задом наперед

Небольшая подсказка, для решения этой задачи можно использовать временные переменные, переставляя их с начала массива в конец и обратно

Code
let numbers = [1, 3, 5, 7, 9, 11];

for (let i = 0; i <= (numbers.length - 1) / 2; i++) {
 let swapLast =  numbers[numbers.length - (1 + i)];
 let swapFirst = numbers[i];
 
 numbers[i] = swapLast;
 numbers[numbers.length - (1 + i)] = swapFirst;
}
2 лайка
let numbers = [1, 3, 5, 7, 9, 11];
let k=0; 
if (numbers.length%2==1) { 
   for (let i=numbers.length-1; i>=(numbers.length-1)/2; i--) {
   let number = numbers[k]  
   numbers[k] = numbers[i]
   numbers[i] = number
   k++
  }
} else {
  for (let i=numbers.length-1; i>=numbers.length/2; i--) {
  let number = numbers[k]  
  numbers[k] = numbers[i]
  numbers[i] = number
  k++
  }
  }
  console.log(numbers);

Всем привет! Решил поделится своим решением, может мое сумбурное видение этой задачи кому-то поможет :slight_smile:

1 лайк

let numbers = [23,8,30,12,10,26];
console.log(numbers + ’ исходный’);

if (numbers.length < 6) {
for (let i = 0; i<numbers.length; i++) {
let lastValue;

for (let j = 0;j< numbers.length-2;j++) {
  lastValue = numbers[j];
  let swap = numbers[i];
  numbers[i] = lastValue;
  numbers[j] = swap;
}

}
} else {
for (let i = 1; i<numbers.length; i++) {
let lastValue = numbers.length;

for (let j = 0;j<= numbers.length-4;j++) {
  lastValue = numbers[j];
  let swap = numbers[i];
  numbers[i] = lastValue;
  numbers[j] = swap;
}

}
}
console.log(numbers + ’ результат’);
я попытался решить с помощью сортировки, как учили в теории, НО если в массиве шесть и более элементов, то средние два элемента не менялись, тогда я добавил условие, что если в массиве больше шести элементов, то немного изменяется цикл. Если кто может, подскажите, почему это работает ТАК?
ps.если в массиве будет больше 8 элементов, то средние элементы снова не поменяются, и придётся снова добавлять условие с новым циклом.
Можно ли как-то сделать этот код рабочим на 100% или это неверное решение?

let numbers = [1, 3, 5, 7, 9, 11];
let y = numbers.length - 1;

for (let i = 0; i < numbers.length/2; i++) {  
  let x = numbers[i];
  numbers[i] = numbers[y];
  numbers[y] = x;
  y--;
};
4 лайка

let numbers = [1, 3, 5, 7, 9, 11];
for(let i=numbers.length-1;i>=0;i–){
numbers.push(numbers[i]);
numbers.splice(0+i,1)

}
console.log(numbers);

1 лайк
let numbers = [1,461,192,1052,51];
let swap;

for(let i = 0, j = numbers.length -1; i < j; i++, j--){
swap = numbers[j];
numbers[j] = numbers[i];
numbers[i] = swap;
}
2 лайка

Наверное я ленивый, но есть и такое решение:

Код

let numbers = [1, 3, 5, 7, 9, 11];
numbers = numbers.reverse()

7 лайков
let numbers = [1, 3, 5, 7, 9, 11];

for (let i = 0; i < numbers.length/2; i++) {
  let swap = numbers[i];
  numbers[i] = numbers[numbers.length - (i + 1)];
  numbers[numbers.length - (i + 1)] = swap;
  }

Думаю вот это самое простое.

4 лайка

let numbers = [1, 3, 5, 7, 9, 11];
let numbersCopy = [];

for(let i = numbers.length-1; i >= 0; i–) {
numbersCopy.push(numbers[i]);
}

numbers = numbersCopy;

let numbers = [1, 3, 5, 7, 9, 11];

for (let i = 0; i < numbers.length; i++) {
  for (let j = i + 1; j < numbers.length; j++) {
    let swap = numbers[j];
    numbers[j] = numbers[i];
    numbers[i] = swap;
  }
}
3 лайка

Мой код определенно не совершенен, да и я тут новичек а код - рабочий! (минут 40-60 жизни отнял).

let numbers = [23, 8, 30, 12, 10];

let help = 1;

if (numbers.length % 2 == 0) {
for (let i=0; i<=(numbers.length / 2) - 1; i++) {
let swap = numbers[i];
numbers[i] = numbers[numbers.length-help];
numbers[numbers.length-help]=swap;
help++
}
}

if (numbers.length % 2 !== 0) {
for (let i=0; i<=Math.round(((numbers.length) / 2)-1); i++) {
let swap = numbers[i];
numbers[i] = numbers[numbers.length-help];
numbers[numbers.length-help]=swap;
help++
}
}

Красиво и действительно очень просто, благодарю что поделились. Я не начал в своих размышлениях пробовать такой вариант т.к. не знал что делать если numbers.length не четная и казалось что i < numbers.length / 2 сломает код, но в вашем решении это не важно, супер.

Я тут еще вариант набросал очень доступный по быстрому:
let numbers = [1, 3, 5, 7, 9, 11];
let help = 1;

for (let i=0; i<=(numbers.length-1)/2; i++) {
let swap = numbers[i];
numbers[i] = numbers[numbers.length-help];
numbers[numbers.length-help] = swap;
help++
}

for (let i = 0, j = numbers.length - 1; i < numbers.length, j >= 0; i++, j--) {
  if (i === j) {
      break; 
  } else if (j - i === 1) {
    swap =numbers[j];
    numbers[j] = numbers[i];
    numbers[i] = swap;
    break;
  } else {
    swap =numbers[j];
    numbers[j] = numbers[i];
    numbers[i] = swap;
  }
}

Запутанно немного, можно без вложенного цикла, а почему не работает на разные массивы - ограничения циклов (j < numbers.length - 2) - этот сработает до 3го включительно элемента в списке из 6ти элементов, но если элементов 8, то до 5го, а значит поменяет элементы 4 и 5 местами 2 раза

let numbers = [23,8,30,12,10,26];
var reverse = numbers.length-1;

for (var i = 0; i<numbers.length/2; i++) {
var x = numbers[i];
numbers[i] = numbers[reverse];
numbers[reverse] = x;
reverse–;
}

let numbers = [1, 3, 5, 7, 9, 11];
let numbers2 = [];

for (let i = 0; i < numbers.length; i++) {
  numbers2[numbers.length - i - 1] = numbers[i];
}

numbers = numbers2;

console.log(numbers);

так же решил с помощью метода, начал смотреть, как люди решают задачу, офигел

let numbers = [1, 3, 5, 7, 9, 11];

for(let i = 0, j = numbers.length - 1; i < j; i++, j--)

    [numbers[i], numbers[j]] = [numbers[j], numbers[i]];
1 лайк

let numbers = [1, 3, 5, 7, 9, 11];

// numbers.reverse();

let newArr = [];
for (let i = numbers.length - 1; i >= 0; i–) {
newArr.push(numbers[i]);
}
numbers = newArr;

let numbers = [1, 3, 5, 7, 9, 11];

for(let i=0;i<Math.floor(numbers.length/2);i++) {

let temp = numbers[i];
numbers[i] = numbers[numbers.length-1-i];
numbers[numbers.length-1-i] = temp;

}