【问题标题】:How do you swap two integer variables without using any if conditions, casting, or additional variables? [closed]如何在不使用任何 if 条件、强制转换或其他变量的情况下交换两个整数变量? [关闭]
【发布时间】:2010-07-16 06:27:14
【问题描述】:

有两个整数变量。您可以在不使用任何 if 条件、不强制转换和不使用其他变量的情况下交换这些整数变量吗?例如:

int a = 10;
int b = 5;

a > b 总是。答案应该是a == 5b == 10

【问题讨论】:

  • 不,我不知道如何减缓或加快问题的速度。
  • 似乎是一个家庭作业,如果是这样的话,你应该这样标记它
  • 你能解决这个问题吗
  • 当有人对重复的家庭作业投赞成票时,这不是很可爱吗? :P

标签: swap


【解决方案1】:

如果您认为不使用第三个变量是聪明,那么进行一些性能测试,您会发现更快的方法是使用第三个 int 临时存储变量。

无论如何,我用 XOR 位运算符解决了这个问题:

a ^= b;
b ^= a;
a ^= b;

【讨论】:

  • 更多关于异或交换的信息在这里en.wikipedia.org/wiki/XOR_swap_algorithm
  • 如果a == b,这将无法正常工作。
  • 你使用什么语言?
  • @Axoren:不,它不会失败。
  • 您的示例“失败”,因为您的变量指向相同的内存位置。这不在问题范围内
【解决方案2】:
a=a+b;
b=a-b;
a=a-b;

【讨论】:

    【解决方案3】:

    这是一个小技巧。

    int a = 5;
    int b= 10;
    a = a+b;
    b = a-b; /* Really (a+b) - b i.e. a */
    a = a-b; /* Really (a+b) - a i.e. b */
    

    【讨论】:

      【解决方案4】:

      简单试试这个

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

      就是这样

      【讨论】:

        【解决方案5】:

        是的,您可以通过使用加/减操作来做到这一点。

        Example:
        num1 = num1 + num2;                
        num2 = num1 - num2;                
        num1 = num1 - num2;
        

        【讨论】:

        • 最好使用加法/减法来避免溢出和舍入问题。也就是说,最好只使用一个临时变量,但仍然如此。
        • 如果 num2 为 0,则乘法/除法不起作用。
        • 感谢现在更新的信息
        【解决方案6】:
        a=a+b
        b=a-b
        a=a-b
        

        就是这样!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-08
          • 1970-01-01
          相关资源
          最近更新 更多