Есть ли возможность поменять три числа в одном утверждении
Например:
- a = 10
- b = 20
- c = 30
Я хочу, чтобы значения изменялись в соответствии со следующим списком
a = 20
b = 30
c = 10
Могут ли эти значения переноситься в одну строку?
Есть ли возможность поменять три числа в одном утверждении
Например:
Я хочу, чтобы значения изменялись в соответствии со следующим списком
a = 20
b = 30
c = 10
Могут ли эти значения переноситься в одну строку?
Я нашел другое решение для этого вопроса.
Вы можете использовать это на многих языках, например C,C++ and Java
.
Он будет работать и для float
и long
.
a=(a+b+c) - (b=c) - (c=a);
$ 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
Это глупый вопрос. Но вот единственный ответ (пока), который является как четко определенным C, так и по-настоящему одной строкой:
a ^= b, b ^= a, a ^= b, b ^= c, c ^= b, b ^= c;
Правильно использует алгоритм обмена XOR.
Примечание.. Предполагается, что a
, b
и c
являются одинаковыми целыми типами (вопрос не указан).
Решение в С#. Сначала используйте 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);
Использовать оператор запятой...
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);
Um, мне нравятся эти логические вещи, мое решение:
a= b+c-((b=c)+(c=a))+c;
BTW: Я тестировал это (на самом деле используя JS) и работаю с любыми номерами:)
Edit
Я тестировал с отрицательными и десятичными знаками и тоже работал:)
Поскольку вы не указали язык, я выберу один из моих вариантов. Это Рубин.
[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
Попробуйте другой сценарий: Например:
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;