Обмен тремя номерами в одном заявлении

Есть ли возможность поменять три числа в одном утверждении

Например:

  • a = 10
  • b = 20
  • c = 30

Я хочу, чтобы значения изменялись в соответствии со следующим списком

a = 20
b = 30
c = 10

Могут ли эти значения переноситься в одну строку?

Ответ 1

Я нашел другое решение для этого вопроса.

Вы можете использовать это на многих языках, например C,C++ and Java.

Он будет работать и для float и long.

a=(a+b+c) - (b=c) - (c=a);

Ответ 2

$ python
>>> a, b, c = 10, 20, 30
>>> print a, b, c
10 20 30
>>> a, b, c = b, c, a
>>> print a, b, c
20 30 10

Ответ 3

Это глупый вопрос. Но вот единственный ответ (пока), который является как четко определенным C, так и по-настоящему одной строкой:

a ^= b, b ^= a, a ^= b, b ^= c, c ^= b, b ^= c;

Правильно использует алгоритм обмена XOR.

Примечание.. Предполагается, что a, b и c являются одинаковыми целыми типами (вопрос не указан).

Ответ 4

Решение в С#. Сначала используйте xor swap a и b. Результатом присваивания является назначенное значение, в этом случае b является самой левой переменной, поэтому она возвращается в результате (b ^= a ^ (a ^= b ^= a)). Затем замените c и b с использованием того же алгоритма.:)

            int a = 10;
            int b = 20;
            int c = 30;
            c ^= (b ^= a ^ (a ^= b ^= a)) ^ (b ^= c ^= b);

Ответ 5

Использовать оператор запятой...

a = 10;
b = 20;
c = 30;
/* one statement */
tmp = a, a = b, b = c, c = tmp; /* assumes tmp has been declared */
assert(a == 20);
assert(b == 30);
assert(c == 10);

Ответ 6

Um, мне нравятся эти логические вещи, мое решение:

a= b+c-((b=c)+(c=a))+c;

BTW: Я тестировал это (на самом деле используя JS) и работаю с любыми номерами:)

Edit

Я тестировал с отрицательными и десятичными знаками и тоже работал:)

Ответ 7

Поскольку вы не указали язык, я выберу один из моих вариантов. Это Рубин.

[email protected]$ irb
1.9.3p0 :001 > a = 10
 => 10 
1.9.3p0 :002 > b = 20
 => 20 
1.9.3p0 :003 > c = 30
 => 30 
1.9.3p0 :004 > a, b, c = b, c, a # <== transfer is happening here
 => [20, 30, 10] 
1.9.3p0 :005 > a
 => 20 
1.9.3p0 :006 > b
 => 30 
1.9.3p0 :007 > c
 => 10

Ответ 8

Попробуйте другой сценарий:  Например:

a = 10
b = 20
c = 30

a= a+b+c;
b=a-b-c;
c=a-b-c;
a=a-b-c;

Для n число,

a = 10
b = 20
c = 30
.
.
.
n


a= a+b+c+......+n;
b=a-b-c-.......-n;
c=a-b-c-.......-n;
.
.
.
n=a-b-c-.......-n;
a=a-b-c-.......-n;