在单一陈述中交换三个数字

Pra*_*bhu 12 c logic

是否有可能在一个语句中交换三个数字

例如:

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

我希望根据以下列表更改值

a = 20
b = 30
c = 10
Run Code Online (Sandbox Code Playgroud)

这些值可以在一行中传输吗?

kev*_*kev 7

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 原始标签列表中没有C. (4认同)

Oli*_*rth 6

这是一个愚蠢的问题.但是这里唯一的答案(到目前为止)是明确定义的C和真正的单行:

a ^= b, b ^= a, a ^= b, b ^= c, c ^= b, b ^= c;
Run Code Online (Sandbox Code Playgroud)

正确使用XOR交换算法.

注意:这假定a,b并且c都是相同的整数类型(问题未指定).

  • `int a = 10,b = 10,c = 10;` (3认同)

Pen*_*hev 5

C#中的解决方案.使用XOR交换ab第一.赋值的结果是赋值,在这种情况下b是最左边的变量,因此它是返回的结果(b ^= a ^ (a ^= b ^= a)).然后交换cb 使用相同的算法.:)

            int a = 10;
            int b = 20;
            int c = 30;
            c ^= (b ^= a ^ (a ^= b ^= a)) ^ (b ^= c ^= b);
Run Code Online (Sandbox Code Playgroud)

  • -1:OP要求C.在C中,这是未定义的行为. (2认同)

Kal*_*avi 3

我找到了这个问题的另一个解决方案。

您可以在许多语言中使用它,例如C,C++ and Java.

它也适用于floatlong

a=(a+b+c) - (b=c) - (c=a);
Run Code Online (Sandbox Code Playgroud)