交换值而不使用第三个变量(Swapping values without using third variable)

优质
小牛编辑
137浏览
2023-12-01

在许多情况下,程序员需要交换两个变量的值。 在这里,我们将学习如何交换两个整数变量的值,这可能导致交换任何类型的值。 变量之间的值可以通过两种方式交换 -

  • 在第三个(临时)变量的帮助下
  • 不使用任何临时变量

我们已经学会了first method 。 在这里,我们将学习第二种方法。 虽然它看起来像魔术,但它只是一个小技巧。 想象一下,我们现在分别在a和b中存储了两个数字1和2 -

  • 如果我们添加a和b(1 + 2)并将其存储到a然后a将变为3而b仍然是2。

  • 现在我们从a(3)的新值中减去b(2)并将其存储到b然后a仍然是3而b变为1.注意1早先由a保持。

  • 现在我们从a(3)中减去具有新值(1)的b并将其存储到b(a​​ = 3 - 1)然后a保持先前由b保持的值2。

  • 结论 - 交换值。

算法 (Algorithm)

我们现在将逐步算法的方式定义上述过程 -

START
   Var1, Var2
   Step 1 → Add Var1 and Var2 and store to Var1
   Step 2 → Subtract Var2 from Var1 and store to Var2
   Step 3 → Subtract Var2 from Var1 and store to Var1
STOP

伪代码 (Pseudocode)

从上面的算法,我们可以为这个程序绘制伪代码 -

procedure swap(a, b)
   a ← a + b    // a holds the sum of both
   b ← a - b    // b now holds the value of a
   a ← a - b    // a now holds value of b
end procedure

实现 (Implementation)

上述算法的C实现应该如下所示 -

#include <stdio.h>
int main() {
   int a, b;
   a = 11;
   b = 99;
   printf("Values before swapping - \n a = %d, b = %d \n\n", a, b);
   a = a + b;  // ( 11 + 99 = 110)
   b = a - b;  // ( 110 - 99 = 11)
   a = a - b;  // ( 110 - 11 = 99)
   printf("Values after swapping - \n a = %d, b = %d \n", a, b);
}

输出 (Output)

该计划的输出应为 -

Values before swapping -
 a = 11, b = 99                                         
Values after swapping -
 a = 99, b = 11