📜  交换三个变量而不使用临时变量

📅  最后修改于: 2021-05-25 08:50:44             🧑  作者: Mango

给定三个变量a,b和c,将它们交换而没有临时变量。
例子 :

Input  : a = 10, b = 20 and c = 30
Output : a = 30, b = 10 and c = 20

方法1(使用算术运算符)
这个想法是获得两个给定数字之一的和。然后可以使用总和与总和相减来交换数字。
我们已经在这里讨论了交换两个变量。我们可以扩展相同的方法

C++
// C++ program to swap three variables
// without using temporary variable.
#include 
using namespace std;
 
// Assign c's value to a, a's value to b and
// b's value to c.
void swapThree(int &a, int &b, int &c)
{
    // Store sum of all in a
    a = a + b + c;  // (a = 60)
 
    // After this, b has value of a
    b = a - (b+c);  // (b = 60 – (20+30) =10)
 
    // After this, c has value of b
    c = a - (b+c);  // (c = 60 – (10 + 30) = 20)
 
    // After this, a has value of c
    a = a - (b+c);   //(a = 60 – (10 + 20) = 30)
}
 
// Driver code
int main()
{
    int a = 10, b = 20, c = 30;
 
    cout << "Before swapping a = " << a << ", b = "
         << b << ", c = " << c << endl;
 
    swapThree(a, b, c);
 
    cout << "After swapping a = " << a << ", b = "
         << b << ", c = " << c << endl;
 
    return 0;
}


Java
// Java program to swap three variables
// without using temporary variable.
class GFG
{
    static int a, b, c;
 
    // Assign c's value to a, a's value
    // to b and b's value to c.
    static void swapThree()
    {
             
        // Store sum of all in a
        // (a = 60)
        a = a + b + c;
     
        // After this, b has value of a
        // (b = 60 - (20 + 30) = 10)
        b = a - (b + c);
     
        // After this, c has value of b
        // (c = 60 - (10 + 30) = 20)
        c = a - (b + c);
     
        // After this, a has value of c
        // (a = 60 - (10 + 20) = 30)
        a = a - (b + c);
    }
 
    // Driver Code
    public static void main(String []args)
    {
        a = 10; b = 20; c = 30;
        System.out.println("Before swapping a = " +
                                 a + ", b = " + b +
                                     ", c = " + c);
                             
        // Calling Function
        swapThree();
 
        System.out.println("After swapping a = " +
                                a + ", b = " + b +
                                    ", c = " + c);
    }
}
 
// This code is contributed by PrinciRaj1992


Python3
# python 3 program to swap three variables
# without using temporary variable.
 
# Assign c's value to a, a's value to b and
# b's value to c.
def swapThree(a, b, c):
    # Store sum of all in a
    a = a + b + c # (a = 60)
 
    # After this, b has value of a
    b = a - (b+c) # (b = 60 – (20+30) =10)
 
    # After this, c has value of b
    c = a - (b+c) # (c = 60 – (10 + 30) = 20)
 
    # After this, a has value of c
    a = a - (b+c) #(a = 60 – (10 + 20) = 30)
     
    print("After swapping a =",a,", b =",b,", c =",c)
 
# Driver code
if __name__ == '__main__':
    a = 10
    b = 20
    c = 30
 
    print("Before swapping a =",a,", b =",b,", c =",c)
 
    swapThree(a, b, c)
     
# This code is contributed by
# Surendra_Gangwar


C#
// C# program to swap three variables
// without using temporary variable.
using System;
 
class GFG
{
 
    // Assign c's value to a, a's value
    // to b and b's value to c.
    static void swapThree(ref int a,
                        ref int b,
                        ref int c)
    {
    // Store sum of all in a
    // (a = 60)
        a = a + b + c;
 
    // After this, b has value of a
    // (b = 60 – (20 + 30) = 10)
        b = a - (b + c);
 
    // After this, c has value of b
    // (c = 60 – (10 + 30) = 20)
        c = a - (b + c);
 
    // After this, a has value of c
    // (a = 60 – (10 + 20) = 30)
        a = a - (b + c);
    }
 
    // Driver Code
    static void Main(String []args)
    {
         
        int a = 10, b = 20, c = 30;
        Console.WriteLine("Before swapping a = " +
                                a + ", b = " + b +
                                    ", c = " + c);
                             
        // Calling Function
        swapThree(ref a, ref b,ref c);
 
        Console.Write("After swapping a = " +
                           a + ", b = " + b +
                               ", c = " + c);
    }
}
 
// This code is contributed by Sam007.


PHP


Javascript


C++
// C++ program to swap three variables
// without using temporary variable
#include 
using namespace std;
 
// Assign c's value to a, a's value to b and
// b's value to c.
void swapThree(int &a, int &b, int &c)
{
    // Store XOR of all in a
    a = a ^ b ^ c;
 
    // After this, b has value of a
    b = a ^ b ^ c;
 
    // After this, c has value of b
    c = a ^ b ^ c;
 
    // After this, a has value of c
    a = a ^ b ^ c;
}
 
// Driver code
int main()
{
    int a = 10, b = 20, c = 30;
 
    cout << "Before swapping a = " << a << ", b = "
         << b << ", c = " << c << endl;
 
    swapThree(a, b, c);
 
    cout << "After swapping a = " << a << ", b = "
         << b << ", c = " << c << endl;
 
    return 0;
}


Java
// Java program to swap three variables
// without using temporary variable.
class GFG
{
    static int a, b, c;
 
    // Assign c's value to a, a's value
    // to b and b's value to c.
    static void swapThree()
    {
        // Store XOR of all in a
        a = a ^ b ^ c;
 
        // After this, b has value of a
        b = a ^ b ^ c;
 
        // After this, c has value of b
        c = a ^ b ^ c;
 
        // After this, a has value of c
        a = a ^ b ^ c;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        a = 10;
        b = 20;
        c = 30;
        System.out.println("Before swapping a = " + a +
                           ", b = " + b + ",c = " + c);
 
        // Calling Function
        swapThree();
        System.out.println("After swapping a = " + a +
                           ", b = " + b + ", c = " + c);
    }
}
 
// This code is contributed by Rajput-Ji


Python3
# Python program to swap three variables
# without using temporary variable
 
# Assign c's value to a, a's value to b and
# b's value to c.
def swapThree(a, b, c) :
 
    # Store XOR of all in a
    a[0] = a[0] ^ b[0] ^ c[0]
 
    # After this, b has value of a[0]
    b[0] = a[0] ^ b[0] ^ c[0]
 
    # After this, c has value of b
    c[0] = a[0] ^ b[0] ^ c[0]
 
    # After this, a[0] has value of c
    a[0] = a[0] ^ b[0] ^ c[0]
 
# Driver code
a, b, c = [10], [20], [30]
 
print("Before swapping a = ", a[0],
    ", b = ", b[0], ", c = ", c[0])
 
swapThree(a, b, c)
 
print("After swapping a = ", a[0],
   ", b = ", b[0], ", c = ", c[0])
 
# This code is contributed by SHUBHAMSINGH10


C#
// C# program to swap three variables
// without using temporary variable.
using System;
 
class GFG
{
     
    // Assign c's value to a, a's value
    // to b and b's value to c.
    static void swapThree(ref int a,
                          ref int b,
                          ref int c)
    {
    // Store XOR of all in a
        a = a ^ b ^ c;
 
    // After this, b has value of a
        b = a ^ b ^ c;
 
    // After this, c has value of b
        c = a ^ b ^ c;
 
    // After this, a has value of c
        a = a ^ b ^ c;
    }
 
    // Driver Code
    static void Main(String []args)
    {
         
    int a = 10, b = 20, c = 30;
        Console.WriteLine( "Before swapping a = " +
                            a +", b = " + b +
                               ",c = " + c);
                              
         
        // Calling Function
        swapThree(ref a, ref b,ref c);
 
         
        Console.Write("After swapping a = " +
                       a +", b = " + b +
                       ", c = " + c);
                        
    }
}
 
// This code is contributed by Sam007.


PHP


Javascript


输出 :

Before swapping a = 10, b = 20, c = 30
After swapping a = 30, b = 10, c = 20

感谢Mazhar MIK提出了这种方法。
方法2(使用按位XOR)
按位XOR运算符可用于交换三个变量。这个想法类似于方法1。我们首先将所有数字的XOR存储在’a’中。然后,我们通过与其他两个数字进行XOR运算得到单个数字。

C++

// C++ program to swap three variables
// without using temporary variable
#include 
using namespace std;
 
// Assign c's value to a, a's value to b and
// b's value to c.
void swapThree(int &a, int &b, int &c)
{
    // Store XOR of all in a
    a = a ^ b ^ c;
 
    // After this, b has value of a
    b = a ^ b ^ c;
 
    // After this, c has value of b
    c = a ^ b ^ c;
 
    // After this, a has value of c
    a = a ^ b ^ c;
}
 
// Driver code
int main()
{
    int a = 10, b = 20, c = 30;
 
    cout << "Before swapping a = " << a << ", b = "
         << b << ", c = " << c << endl;
 
    swapThree(a, b, c);
 
    cout << "After swapping a = " << a << ", b = "
         << b << ", c = " << c << endl;
 
    return 0;
}

Java

// Java program to swap three variables
// without using temporary variable.
class GFG
{
    static int a, b, c;
 
    // Assign c's value to a, a's value
    // to b and b's value to c.
    static void swapThree()
    {
        // Store XOR of all in a
        a = a ^ b ^ c;
 
        // After this, b has value of a
        b = a ^ b ^ c;
 
        // After this, c has value of b
        c = a ^ b ^ c;
 
        // After this, a has value of c
        a = a ^ b ^ c;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        a = 10;
        b = 20;
        c = 30;
        System.out.println("Before swapping a = " + a +
                           ", b = " + b + ",c = " + c);
 
        // Calling Function
        swapThree();
        System.out.println("After swapping a = " + a +
                           ", b = " + b + ", c = " + c);
    }
}
 
// This code is contributed by Rajput-Ji

Python3

# Python program to swap three variables
# without using temporary variable
 
# Assign c's value to a, a's value to b and
# b's value to c.
def swapThree(a, b, c) :
 
    # Store XOR of all in a
    a[0] = a[0] ^ b[0] ^ c[0]
 
    # After this, b has value of a[0]
    b[0] = a[0] ^ b[0] ^ c[0]
 
    # After this, c has value of b
    c[0] = a[0] ^ b[0] ^ c[0]
 
    # After this, a[0] has value of c
    a[0] = a[0] ^ b[0] ^ c[0]
 
# Driver code
a, b, c = [10], [20], [30]
 
print("Before swapping a = ", a[0],
    ", b = ", b[0], ", c = ", c[0])
 
swapThree(a, b, c)
 
print("After swapping a = ", a[0],
   ", b = ", b[0], ", c = ", c[0])
 
# This code is contributed by SHUBHAMSINGH10

C#

// C# program to swap three variables
// without using temporary variable.
using System;
 
class GFG
{
     
    // Assign c's value to a, a's value
    // to b and b's value to c.
    static void swapThree(ref int a,
                          ref int b,
                          ref int c)
    {
    // Store XOR of all in a
        a = a ^ b ^ c;
 
    // After this, b has value of a
        b = a ^ b ^ c;
 
    // After this, c has value of b
        c = a ^ b ^ c;
 
    // After this, a has value of c
        a = a ^ b ^ c;
    }
 
    // Driver Code
    static void Main(String []args)
    {
         
    int a = 10, b = 20, c = 30;
        Console.WriteLine( "Before swapping a = " +
                            a +", b = " + b +
                               ",c = " + c);
                              
         
        // Calling Function
        swapThree(ref a, ref b,ref c);
 
         
        Console.Write("After swapping a = " +
                       a +", b = " + b +
                       ", c = " + c);
                        
    }
}
 
// This code is contributed by Sam007.

的PHP


Java脚本


输出:

Before swapping a = 10, b = 20, c = 30
After swapping a = 30, b = 10, c = 20