Как поменять местами более двух переменных, используя временные переменные

Я пытаюсь понять, как поменять местами более двух переменных, используя временную переменную. Есть 4 переменные, которые нужно поменять местами, 1,2,3 и 4. Первая переменная - поменять местами 2, 2 - 3, 3 - 4 и 4 - 1. Это кажется достаточно простым, но я только научился менять местами два. переменные, поэтому и борюсь с большим масштабом. я пытался

temp = 1
1 = 2
temp = 2 
2 = 3 
temp = 3
3 = 4
temp = 4
4 = 1

Нужно ли мне более одной временной переменной? Все еще только новичок, любая помощь будет оценена по достоинству!

Изменить: извините, забыл добавить, что я пишу код для java.


person user2420262    schedule 25.05.2013    source источник


Ответы (3)


Просто используйте массив вместе с циклом, и одной временной переменной будет достаточно. P-код, так как вы не упомянули язык:

array = { 1, 2, 3, 4 }
tmp = array[0]
for i in [0, array.count - 1)
    array[i] = array[i + 1]
array[array.count - 1] = tmp
person Community    schedule 25.05.2013

Рассмотрим, что происходит на третьем шаге. Исходное значение 1 (которое было сохранено в temp в первой строке) теряется, поскольку вы перезаписываете temp значением 2.

Как оказалось, нет необходимости сохранять копию исходного значения 2, потому что в 1 уже есть копия. То же самое относится ко всем остальным переменным (кроме 1).

Таким образом, единственный раз, когда вам нужно использовать temp, это в самом начале сохранить значение 1 (как вы сейчас делаете), а также в самом конце, когда вы присваиваете исходное значение 1 4. Вы не можете использовать 1, потому что он был перезаписан, но копия была сохранена в temp только для этой цели.

Итак, окончательный код выглядит так:

temp = 1
1 = 2
2 = 3 
3 = 4
4 = temp
person tom    schedule 25.05.2013

Массив является лучшим подходом для вашего требования. В вашем нынешнем псевдокоде вы можете сделать что-то вроде этого:

temp = 1
1 = 2
2 = 3 
3 = 4
4 = temp

В java вы можете сделать что-то вроде ниже, используя массив:

int[] x = {5,15,25,35};
int temporary = x[0];
for(int j=0;j<x.length-1;j++){
    x[j]=x[j+1];
}
x[x.length-1]=temporary;
person AllTooSir    schedule 25.05.2013