Требуется поменять местами значения элементов массива x a и x b какой оператор нужно добавить вме
Перейти к содержимому

Требуется поменять местами значения элементов массива x a и x b какой оператор нужно добавить вме

  • автор:

10 способов поменять местами два значения в JavaScript

В какой-то момент своей карьеры разработчики сталкиваются с задачей обмена значениями. Большую часть времени мы пользуемся классическим методом с использованием дополнительной переменной. Ах, если бы был способ лучше. Но подождите-ка! Такой способ есть, и не один. В моменты отчаяния мы серфим интернет в поисках решений, находим одно, копируем его без какого-либо понимания, как работает этот кусочек кода. К счастью для вас, сейчас самое время понять, как поменять местами два значения просто и эффективно.

1) Использование временной переменной

Сразу отсечем самое очевидное решение.

function swapWithTemp(num1,num2) < console.log(num1,num2) var temp = num1; num1 = num2; num2 = temp; console.log(num1,num2) >swapWithTemp(2.34,3.45)

2) Использование сложения и вычитания

Да, вы прочитали правильно. Мы можем использовать немного магии математики, чтобы обменять парочку значений.

function swapWithPlusMinus(num1,num2) < console.log(num1,num2) num1 = num1+num2; num2 = num1-num2; num1 = num1-num2; console.log(num1,num2) >swapWithPlusMinus(2.34,3.45)

Что-о-о!? Ага, а теперь давайте посмотрим, как это работает. Мы получаем сумму двух чисел на 4 строке. Сейчас, если мы вычтем одно число из суммы, то получим другое число. Это как раз то, что мы делаем на 5 строке. Вычитание num2 из суммы, которая находится в num1, дает нам изначальное значение num1, которое помещается в num2. Аналогично мы получаем num2 и помещаем его в num1 на 6 строке.

Осторожно: на просторах интернета гуляет еще один метод обмена в одну строчку лишь с операцией сложения.

Вот как он выглядит:

function swapWithPlusMinusShort(num1,num2) < console.log(num1,num2) num2 = num1+(num1=num2)-num2; console.log(num1,num2) >swapWithPlusMinusShort(2,3)

Код выше дает ожидаемый результат. Выражение внутри () хранит num2 в num1, затем мы вычитаем num1 — num2, а это ноль, так как num2 — num2 = 0. Следовательно, мы получаем нужный результат. Но когда мы используем числа с плавающей точкой, иногда можем увидеть неожиданный результат.

Поиграйтесь в консоли с дробными входными параметрами, как в коде ниже.

function swapWithPlusMinusShort(num1,num2) < console.log(num1,num2) num2 = num1+(num1=num2)-num2; console.log(num1,num2) >swapWithPlusMinusShort(2,3.1)

3) Использование сложения или вычитания

Мы можем получить тот же результат, используя только операцию сложения.

Посмотрим, как этого добиться:

function swapWithPlus(num1,num2) < console.log(num1,num2) num2 = num1 + (num1=num2, 0) console.log(num1,num2) >//Попробуйте реализовать это с помощью только вычитания swapWithPlus(2.3,3.4)

Эта программа работает, но ее читабельность явно страдает. На 4 строке в скобках мы присваиваем num1 num2 и возвращаем 0. По сути наша строка выглядит так:

num2 = num1 + 0 => num2 = num1

Отсюда мы и получаем наш результат.

Замечание: некоторые движки JavaScript могут выполнять свои собственные оптимизации приведенного выше кода, который игнорирует + 0.

4) Использование умножения и деления

Еще немного магии при помощи операторов умножения и деления.

Принцип тот же, что и в предыдущем методе, но с парочкой «причудов».

function swapWithMulDiv(num1,num2) < console.log(num1,num2) num1 = num1*num2; num2 = num1/num2; num1 = num1/num2; console.log(num1,num2) >swapWithMulDiv(2.34,3.45)

Собственно, здесь все похоже. Получаем произведения двух чисел и храним его в одном из чисел. Это то, что происходит на 4 строке. Затем делим произведение на второе число и получаем первое, потом повторяем процесс и получаем второе число.

Вы сделали это! Да вы «математический фокусник«.

Погодите! Что насчет тех «причудов»?

Давайте попробуем запустить следующий код.

function swapWithMulDiv(num1,num2) < console.log(num1,num2) num1 = num1*num2; num2 = num1/num2; num1 = num1/num2; console.log(num1,num2) >//Попробуйте обменять вот таки числа и посмотрите, что выйдет swapWithMulDiv(2.34,0)

Наши значения не поменяются местами, и вместо этого мы получим NaN. Если вы посещали уроки математики, то помните, что вам всегда говорили не делить на 0, потому что получится неопределенность. Причина кроется в работе ограничений и в некоторых других вещах, в которые мы погружаться не будем. Сейчас же мы посмотрим на еще одну проблему этого метода.

function swapWithMulDiv(num1,num2) < console.log(num1,num2) num1 = num1*num2; num2 = num1/num2; num1 = num1/num2; console.log(num1,num2) >//Попробуйте обменять вот таки числа и посмотрите, что выйдет swapWithMulDiv(2.34,Infinity)

Да, вновь NaN. Потому что мы не можем делить на бесконечность, это также неопределенность.

Хотите увидеть еще одну причуду? Я так и думал!

function swapWithMulDiv(num1,num2) < console.log(num1,num2) num1 = num1*num2; num2 = num1/num2; num1 = num1/num2; console.log(num1,num2) >//Попробуйте обменять вот таки числа и посмотрите, что выйдет swapWithMulDiv(2.34,-Infinity)

-бесконечность будет возвращать то же значение, как в прошлом примере, по той же причине.

Даже «математический фокусник» при всех своих силах не может сделать невозможного.

Ниже представлена краткая версия обмена с умножением и делением с теми же проблемами:

function swapWithMulDivShort(num1,num2) < console.log(num1,num2) num2 = num1*(num1=num2)/num2; console.log(num1,num2) >swapWithMulDivShort(2.3,3.4)

Этот код аналогичен краткой версии обмена со сложением и вычитанием. Мы присваиваем num1 num2, а потом 4 строка выглядит так:

num2 = num1 * num2 / num2 => num2 = num1

Вуаля! Наши значения поменялись местами.

5) Использование умножения или деления

function swapWithMul(num1,num2) < console.log(num1,num2) num2 = num1 * (num1=num2, 1) console.log(num1,num2) >//попробуйте сделать обмен через деление и возведение в степень swapWithMul(2.3,3.4)

Эта программа работает, но ее читабельность явно страдает. На 4 строке в скобках мы присваиваем num1 num2 и возвращаем 1. На деле наша строка выглядит так:

num2 = num1 * 1 => num2 = num1

И мы вновь получаем требуемый результат.

6) Использование побитового исключающего ИЛИ

XOR манипулирует битами. Возвращает 1, когда значения переменных различны, и 0 в противном случае.

Теперь поймем, как это работает.

function swapWithXOR(num1,num2) < console.log(num1,num2) num1 = num1^num2; num2 = num1^num2; num1 = num1^num2; console.log(num1,num2) >// протестируйте также отрицательные значения swapWithXOR(10,1)

4-ех битное представление 10 -> 1010

4-ех битное представление 1 -> 0001

На 4 строке: num1 = num1 ^ num2 => 1010 ^ 0001 => 1011 => 7 На 5 строке: num2 = num1 ^ num2 => 1011 ^ 0001 => 1010 => 10 На 6 строке: num1 = num1 ^ num2 => 1011 ^ 1010 => 0001 => 1

Вуаля! Мы вновь поменяли значения местами.

Посмотрим другой пример.

function swapWithXOR(num1,num2) < console.log(num1,num2) num1 = num1^num2; num2 = num1^num2; num1 = num1^num2; console.log(num1,num2) >swapWithXOR(2.34,3.45)

Хм, где же обмен? Мы получили только целую часть числа. И в этом проблема такого способа. XOR предполагает, что входные параметры это целые числа, и уже в соответствии с этим производит вычисления. Но числа с плавающей точкой не являются целыми и представлены стандартом IEEE 754, согласно которому число разбивается на 3 части: знаковый бит, группа битов, представляющих показатель степени, еще одна группа битов, представляющая число между 1 (включая) и 2 (не включая), то есть мантиссу. Поэтому мы и получаем не тот результат.

Еще один пример:

function swapWithXOR(num1,num2) < console.log(num1,num2) num1 = num1^num2; num2 = num1^num2; num1 = num1^num2; console.log(num1,num2) >//Поэксперементируйте с целыми числами и бесконечностью. swapWithXOR(-Infinity,Infinity)

И снова не тот результат, который мы ожидали. Все потому, что бесконечность и -бесконечность это числа с плавающей точкой, а, как мы уже поняли, для XOR это проблема.

7) Использование побитового исключающего НЕ ИЛИ

Эта операция противоположна исключающему ИЛИ. XNOR возвращает 0, если значения различны, и 1 в противном случае. В JavaScript нет специального оператора для XNOR, так что мы используем NOT оператор, чтобы инвертировать XOR.

Поменять местами значения элементов массива с заданными индексами

Поменять местами значения элементов массива
Задача 2: Даны целые массивы A, B и значения К и L (0<=K<=9, 0<=L<=9). Требуется .

Поменять местами значения двух элементов массива
Дано одномерный массив, содержащий 10 элементов. поменять местами значение n-го i k-го элементов.

Поменять местами значения i и j элементов массива с пользовательскими функциями
Я вам буду очень благодарен если вы ответите мне как можно скорее . . .

Поменять местами значения максимального и минимального элементов массива
Задать одномерный массив из 10 целых чисел из отрезка от 0 до 50 с использованием датчика случайных.

11 / 11 / 10
Регистрация: 26.12.2017
Сообщений: 48

Лучший ответ

Сообщение было отмечено SomebodyWhoKnow как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#include using namespace std; int main() { int n; cout  "Write n: "; cin >> n; int *a = new int[n]; // создаём массив размерности n; //----------- for (int i = 0; i  n; i++) { cout  "write mass: "; cin >> a[i]; // заполняем массив; } //----------- for (int i = 0; i  n; i++) { cout  a[i]  " "; // выводим исходный массив; } //----------- cout  endl; int A, B; cout  "Write A,B: "; cin >> A >> B; // вводим а и б; int temp; // создаём временную переменную; temp = a[A]; // присваиваем временной переменной значение первого элемента a[A] = a[B]; // присваиваем значению первого элемента значение второго a[B] = temp; // присваиваем значению второго элемента значение временной переменной. //----------- for (int i = 0; i  n; i++) { cout  a[i]  " "; // выводим получившийся массив; } //----------- system("pause"); return 0; }

Способ работает если у нас массив целых чисел. Если массив вещественных. То замени в некоторых местах значение int на float/double.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Поменять местами элементы массива с четными и нечетными индексами
//Дан массив целых чисел. Воспользовавшись указателями, //поменяйте местами элементы массива с.

Ввести значения элементов массива, поменять местами min/max элементы
Помогите пожалуйста, нада написать программу которая позволяет ввести 10 елементов одного массива.

Поменять местами элементы массива с четными и нечетными индексами (использовать указатели)
В массиве поменять местами элементы с четными и нечетными индексами. Использовать указатели.

Поменять местами элементы массива с четными и нечетными индексами используя указатели
Поменять местами элементы массива с четными и нечетными индексами используя указатели Ну вот не.

Информатика. 10 класс (Повышенный уровень)

Для обмена местами двух элементов массива можно использовать дополнительную переменную, которую называют буфером. Буферу присваивают значение одного из элементов массива, этому элементу присваивают значение другого элемента массива, затем второму элементу присваивают значение буфера.

Для обмена элементов можно использовать встроенную функцию swap: swap(a[i], a[k] ).

Пример 14.2. Задан одномерный массив целых чисел. Поменять местами максимальный и минимальный элементы массива. Предполагается, что каждый из них встречается в массиве только один раз.

Этапы выполнения задания

I. Исходные данные: одномерный массив а , количество элементов n .

II. Результат: преобразованный массив a .

III. Алгоритм решения задачи.

1. Ввод исходных данных.
2. Найдем максимальный элемент массива и его индекс (n_max) .
3. Найдем минимальный элемент массива и его индекс (n_min) .
4. Поменяем местами элементы, стоящие на местах n_max и n_min .
5. Вывод результата.

IV. Описание переменных: n, n_min, n_max – int, а – vector .

Пример 14.3. Задан одномерный массив целых чисел. Циклически сдвинуть все элементы массива влево на 1, первый на последнее место. Например, массив 1 2 3 4 5 будет преобразован в 2 3 4 5 1.

Этапы выполнения задания

I. Исходные данные: одномерный массив а , количество элементов n .

II. Результат: преобразованный массив a .

III. Алгоритм решения задачи.Описание переменных: n – int, а – vector .

1. Ввод исходных данных.
2. В цикле осуществим обмен соседних элементов.
3. Вывод результата.

Решением задачи 14.3 может быть также следующий алгоритм (пример 14.4):

1. Сохраним значение первого элемента в буферной переменной.
2. В цикле сдвинем все элементы на 1 влево.
3. Запишем значение буфера на последнее место в массиве.

Если в массив добавить еще один элемент в конце, то его можно использовать в качестве буферной переменной. В этом случае в цикле нужно будет сделать на 1 сдвиг больше. Затем удалить последний элемент. Удалить последний элемент можно с помощью команды pop_back() .

Осуществим обмен элементов следующим образом:

Тогда мы потеряем значение элемента, стоящего изначально на месте a[i] , и получим два элемента со значением, равным a[k] .

Introducing new Paper mode

Задан массив X из N элементов. Какое условие надо поставить вместо многоточия, чтобы в результате в переменную i был записан номер элемента, равного R? Вводите ответ без лишних пробелов и скобок. i = 0 while i < N and . i += 1

Fill in the Blank
Please save your changes before editing any questions.

Задан массив X из N элементов. Какое условие надо поставить вместо многоточия, чтобы найти минимальный элемент массива в переменной M? Вводите ответ без пробелов. M = X[0] for k in range(1,N): if . : M = X[k]

Fill in the Blank
Please save your changes before editing any questions.

Требуется поменять местами значения элементов массива X[a] и X[b]. Какой оператор нужно добавить вместо многоточия? В ответе не используйте пробелы. X[a] = 4 X[b] = 6 .

Fill in the Blank
Please save your changes before editing any questions.

Задан массив X из N элементов. Какой оператор надо поставить вместо многоточия, чтобы найти номер максимального элемента массива в переменной M? Вводите ответ без пробелов. M = 0 for k in range(1,N): if X[k] > X[M]: .

Fill in the Blank
Please save your changes before editing any questions.

Задан массив X из N элементов. Какой оператор надо поставить вместо многоточия, чтобы в результате в переменную nR был записан номер элемента, равного R? Вводите ответ без пробелов. nR = -1 for k in range(N): if X[k] == R: . break;

Fill in the Blank
Please save your changes before editing any questions.

Задан массив X из N элементов. Что нужно поставить вместо многоточия, чтобы в результате элементы в массиве X были переставлены в обратном порядке? Вводите ответ без пробелов. for k in range(. ): c = X[k] X[k] = X[N-1-k] X[N-1-k] = c

Fill in the Blank
Please save your changes before editing any questions.

Задан массив X из N элементов.. Какой оператор нужно поставить вместо многоточия, чтобы в результате элементы в массиве X были сдвинуты на один вправо (циклически)? В ответе не используйте пробелы. c = X[N-1] k = N-1 while k > 0: . k -= 1 X[0] = c

Fill in the Blank
Please save your changes before editing any questions.

Задан массив A. Требуется выделить все отрицательные элементы массива A в массив B. Какой оператор надо вставить в программу вместо многоточия? Вводите ответ без пробелов. B = [] c = 0 for x in A: if x < 0: .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *