c/c++语言开发共享在单一陈述中交换三个数字

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

例如:

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

a = 20 b = 30 c = 10 

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

    我发现了这个问题的另一个解决方案

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

    它也适用于floatlong

     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交换算法 。

    注意:这假设abc都是相同的整数类型(问题未指定)。

    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); 

    利用逗号运算符……

     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); 

    嗯,我喜欢这些逻辑事物,我的解决方案:

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

    顺便说一句:我测试了(实际上使用JS)并使用任何数字:)

    编辑

    我测试了负数和小数,也工作了:)

    由于您没有指定语言,我将选择一个我的选择。 这是Ruby。

     sergio@soviet-russia$ 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=abc; c=abc; a=abc; 

    对于n号,

    需要了解更多c/c++开发分享在单一陈述中交换三个数字,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     a = 10 b = 20 c = 30 . . . n a= a+b+c+......+n; b=abc-.......-n; c=abc-.......-n; . . . n=abc-.......-n; a=abc-.......-n; 

      以上就是c/c++开发分享在单一陈述中交换三个数字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979203.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐