2013-05-25 5 views
1

Я пытаюсь выяснить, как заменить более двух переменных вокруг переменной temp. Есть 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.

ответ

1

Просто используйте массив вместе с циклом, и одной временной переменной будет достаточно. Код по ОКПО, ассоциироваствующий:

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 
1

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

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

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

Таким образом, окончательный код выглядит следующим образом:

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

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

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^