Рубрики

Как поменять два числа без использования временной переменной?

Учитывая две переменные, x и y, меняйте местами две переменные, не используя третью переменную.

Метод 1 (Использование арифметических операторов)
Идея состоит в том, чтобы получить сумму в одном из двух заданных чисел. Затем числа можно поменять местами с помощью суммы и вычитания из суммы.

C ++

// C ++ Программа для замены двух чисел без
// используя временную переменную
#include <bits/stdc++.h>

using namespace std;

  

int main()

{

    int x = 10, y = 5;

  

    // Код для замены 'x' и 'y'

    x = x + y; // х теперь становится 15

    y = x - y; // у становится 10

    x = x - y; // х становится 5

    cout << "After Swapping: x =" << x << ", y=" << y;

}

  
// Этот код предоставлен mohit kumar.

С

#include <stdio.h>

int main()

{

    int x = 10, y = 5;

  

    // Код для замены 'x' и 'y'

    x = x + y; // х теперь становится 15

    y = x - y; // у становится 10

    x = x - y; // х становится 5

  

    printf("After Swapping: x = %d, y = %d", x, y);

  

    return 0;

}

Джава

// Java-программа для замены двух чисел без
// используя временную переменную

import java.*;

  

class Geeks {

  

    public static void main(String a[])

    {

        int x = 10;

        int y = 5;

        x = x + y;

        y = x - y;

        x = x - y;

        System.out.println("After swaping:"

                           + " x = " + x + ", y = " + y);

    }

}

  
// Этот код предоставлен Sam007

Python 3

x = 10

y = 5

   
# Код для замены 'x' и 'y'

  
# х теперь становится 15

x = x + y  

  
# у становится 10

y = x -

  
# х становится 5

x = x - y  

print("After Swapping: x =", x, " y =", y);

  
# Этот код добавлен
# Сумит Судхакар

C #

// Программа для замены двух чисел без
// используя временную переменную

using System;

  

class GFG {

    public static void Main()

    {

        int x = 10;

        int y = 5;

  

        x = x + y;

        y = x - y;

        x = x - y;

        Console.WriteLine("After swapping: x = "

                          + x + ", y = " + y);

    }

}

  
// Этот код предоставлен Sam007

PHP

<?php
// PHP программа для обмена двумя
// номера без использования
// временная переменная

$x = 10; $y = 5;

  
// Код для замены 'x' и 'y'

$x = $x + $y; // х теперь становится 15

$y = $x - $y; // у становится 10

$x = $x - $y; // х становится 5

  

echo "After Swapping: x = "

       $x, ", ", "y = ", $y;

  
// Этот код предоставлен m_kit
?>

Выход :

After Swapping: x = 5, y = 10

Умножение и деление также могут быть использованы для обмена.

C ++

// C ++ Программа для замены двух чисел
// без использования временной переменной
#include <bits/stdc++.h>

using namespace std;

  

int main()

{

    int x = 10, y = 5;

  

    // Код для замены 'x' и 'y'

    x = x * y; // х теперь становится 15

    y = x / y; // у становится 10

    x = x / y; // х становится 5

    cout << "After Swapping: x =" << x << ", y=" << y;

}

  
// Этот код предоставлен mohit kumar.

С

#include <stdio.h>

int main()

{

    int x = 10, y = 5;

  

    // Код для замены 'x' и 'y'

    x = x * y; // х теперь становится 50

    y = x / y; // у становится 10

    x = x / y; // х становится 5

  

    printf("After Swapping: x = %d, y = %d", x, y);

  

    return 0;

}

Джава

// Java-программа для замены двух чисел
// без использования временной переменной

import java.io.*;

  

class GFG {

    public static void main(String[] args)

    {

        int x = 10;

        int y = 5;

  

        // Код для замены 'x' и 'y'

        x = x * y; // х теперь становится 50

        y = x / y; // у становится 10

        x = x / y; // х становится 5

  

        System.out.println("After swaping:"

                           + " x = " + x + ", y = " + y);

    }

}

  
// Этот код предоставлен ajit

python3

# Python3 программа для
# поменять местами два числа
# без использования
# временная переменная

x = 10

y = 5

  
# код для обмена
# 'x' и 'y'

  
# х теперь становится 50

x = x * y

  
# у становится 10

y = x // y; 

  
# х становится 5

x = x // y; 

  

print("After Swapping: x ="

              x, " y =", y);

  
# Этот код добавлен
# by @ajit

C #

// C # Программа для обмена двумя
// номера без использования
// временная переменная

using System;

  

class GFG {

    static public void Main()

    {

        int x = 10;

        int y = 5;

  

        // Код для замены 'x' и 'y'

        x = x * y; // х теперь становится 50

        y = x / y; // у становится 10

        x = x / y; // х становится 5

  

        Console.WriteLine("After swaping:"

                          + " x = " + x + ", y = " + y);

    }

}

  
// Этот код предоставлен ajit.

PHP

<?php
// Код драйвера

    $x = 10;

    $y = 5;

  
// Код для замены 'x' и 'y'

    $x = $x * $y; // х теперь становится 50

    $y = $x / $y; // у становится 10

    $x = $x / $y; // х становится 5

  

echo "After Swapping: x = ", $x,

                " ", "y = ", $y;

  
// Этот код предоставлен m_kit
?>

Выход :

After Swapping: x = 5, y = 10

Метод 2 (Использование побитового XOR)
Побитовый оператор XOR можно использовать для замены двух переменных. XOR двух чисел x и y возвращает число, в котором все биты равны 1, где биты x и y различаются. Например, XOR 10 (в двоичном 1010) и 5 (в двоичном 0101) равно 1111, а XOR 7 (0111) и 5 (0101) равно (0010).

C ++

// C ++ код для замены с использованием XOR
#include <bits/stdc++.h>

  

using namespace std;

  

int main()

{

    int x = 10, y = 5;

    // Код для замены 'x' (1010) и 'y' (0101)

    x = x ^ y; // х теперь становится 15 (1111)

    y = x ^ y; // у становится 10 (1010)

    x = x ^ y; // х становится 5 (0101)

    cout << "After Swapping: x =" << x << ", y=" << y;

    return 0;

}

  
// Этот код предоставлен mohit kumar.

С

// C-код для обмена с использованием XOR
#include <stdio.h>

int main()

{

    int x = 10, y = 5;

  

    // Код для замены 'x' (1010) и 'y' (0101)

    x = x ^ y; // х теперь становится 15 (1111)

    y = x ^ y; // у становится 10 (1010)

    x = x ^ y; // х становится 5 (0101)

  

    printf("After Swapping: x = %d, y = %d", x, y);

  

    return 0;

}

Джава

// Java-код для обмена с использованием XOR

import java.*;

  

public class GFG {

  

    public static void main(String a[])

    {

        int x = 10;

        int y = 5;

  

        // Код для замены 'x' (1010) и 'y' (0101)

        x = x ^ y; // х теперь становится 15 (1111)

        y = x ^ y; // у становится 10 (1010)

        x = x ^ y; // х становится 5 (0101)

  

        System.out.println("After swap: x = "

                           + x + ", y = " + y);

    }

}

  
// Этот код предоставлен Sam007.

python3

# Python 3 код для обмена с использованием XOR

  

x = 10

y = 5

  
# Код для замены 'x' и 'y'

x = x ^ y; # х теперь становится 15 (1111)

y = x ^ y; # у становится 10 (1010)

x = x ^ y; # х становится 5 (0101)

  

print ("After Swapping: x = ", x, " y =", y)

  
# Этот код предоставлен
# Сумит Судхакар

C #

// C # программа для обмена с использованием XOR

using System;

  

class GFG {

    public static void Main()

    {

        int x = 10;

        int y = 5;

  

        // Код для замены 'x' (1010)

        // и 'y' (0101)

  

        // х теперь становится 15 (1111)

        x = x ^ y;

  

        // у становится 10 (1010)

        y = x ^ y;

  

        // х становится 5 (0101)

        x = x ^ y;

  

        Console.WriteLine("After swap: x = " + x + ", y = " + y);

    }

}

  
// Этот код предоставлен ajit

PHP

<?php

  
// Код драйвера

$x = 10;

$y = 5;

  
// Код для замены 'x' (1010)
// и 'y' (0101)

  
// х теперь становится 15 (1111)

$x = $x ^ $y

  
// у становится 10 (1010)

$y = $x ^ $y

  
// х становится 5 (0101)

$x = $x ^ $y

  

echo "After Swapping: x = ", $x

                ", ", "y = ", $y;

  
// Этот код предоставлен aj_36
?>

Выход :

After Swapping: x = 5, y = 10

Проблемы с вышеуказанными методами
1) Подход, основанный на умножении и делении, не работает, если одно из чисел равно 0, так как произведение становится равным 0 независимо от другого числа.

2) Оба арифметических решения могут вызвать арифметическое переполнение. Если x и y слишком велики, сложение и умножение могут выходить за пределы целочисленного диапазона.

3) Когда мы используем указатели на переменные и выполняем обмен функций, все вышеперечисленные методы перестают работать, когда оба указателя указывают на одну и ту же переменную. Давайте посмотрим, что произойдет в этом случае, если оба будут указывать на одну и ту же переменную.

// Битовый метод на основе XOR
х = х ^ х; // х становится 0
х = х ^ х; // х остается 0
х = х ^ х; // х остается 0

// Арифметический метод
х = х + х; // х становится 2х
х = х — х; // х становится 0
х = х — х; // х остается 0

Давайте посмотрим на следующую программу.

C ++

#include <bits/stdc++.h>

using namespace std;

void swap(int* xp, int* yp)

{

    *xp = *xp ^ *yp;

    *yp = *xp ^ *yp;

    *xp = *xp ^ *yp;

}

  
// Код драйвера

int main()

{

    int x = 10;

    swap(&x, &x);

    cout<<"After swap(&x, &x): x = "<<x;

    return 0;

}

  
// Этот код предоставлен rathbhupendra

С

#include <stdio.h>

void swap(int* xp, int* yp)

{

    *xp = *xp ^ *yp;

    *yp = *xp ^ *yp;

    *xp = *xp ^ *yp;

}

  

int main()

{

    int x = 10;

    swap(&x, &x);

    printf("After swap(&x, &x): x = %d", x);

    return 0;

}

Джава

class GFG 

{

    static void swap(int[] xp, int[] yp) 

    {

        xp[0] = xp[0] ^ yp[0];

        yp[0] = xp[0] ^ yp[0];

        xp[0] = xp[0] ^ yp[0];

    }

      

    // Код драйвера

    public static void main(String[] args) 

    {

        int[] x = {10};

        swap(x, x);

        System.out.println("After swap(&x, &x): x = " + x[0]);

    }

  
// Этот код предоставлен Rajput-Ji

python3

def swap(xp, yp):

  

    xp[0] = xp[0] ^ yp[0

    yp[0] = xp[0] ^ yp[0

    xp[0] = xp[0] ^ yp[0

  
# Код драйвера

x = [10]

swap(x, x) 

print("After swap(&x, &x): x = ", x[0])

  
# Этот код предоставлен SHUBHAMSINGH10

PHP

<?php

function swap(&$xp, &$yp)

{

    $xp = $xp ^ $yp;

    $yp = $xp ^ $yp;

    $xp = $xp ^ $yp;

}

  
// Код драйвера

$x = 10;

swap($x, $x);

print("After swap(&x, &x): x = " . $x);

  
// Этот код добавлен
// от chandan_jnu
?>


Выход :

After swap(&x, &x): x = 0

Обмен переменной с самим собой может потребоваться во многих стандартных алгоритмах. Например, посмотрите на эту реализацию QuickSort, где мы можем поменять переменную с собой. Вышеупомянутой проблемы можно избежать, поставив условие перед заменой.

C ++

#include <bits/stdc++.h>

using namespace std;

void swap(int* xp, int* yp) 

      

    // Проверяем, совпадают ли два адреса

    if (xp == yp) 

        return

    *xp = *xp + *yp; 

    *yp = *xp - *yp; 

    *xp = *xp - *yp; 

  
// Код драйвера

int main() 

    int x = 10; 

    swap(&x, &x); 

    cout << "After swap(&x, &x): x = " << x; 

    return 0; 

  
// Этот код предоставлен rathbhupendra

С

#include <stdio.h>

void swap(int* xp, int* yp)

{

    if (xp == yp) // Проверяем, совпадают ли два адреса

        return;

    *xp = *xp + *yp;

    *yp = *xp - *yp;

    *xp = *xp - *yp;

}

int main()

{

    int x = 10;

    swap(&x, &x);

    printf("After swap(&x, &x): x = %d", x);

    return 0;

}

Джава

// Java-программа вышеуказанного подхода

class GFG {

  

    static void swap(int xp, int yp)

    {

        if (xp == yp) // Проверяем, совпадают ли два адреса

            return;

        xp = xp + yp;

        yp = xp - yp;

        xp = xp - yp;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        int x = 10;

        swap(x, x);

        System.out.println("After swap(&x, &x): x = " + x);

    }

}

  
// Этот код предоставлен Code_Mech.

python3

# Python3 программа вышеуказанного подхода

def swap(xp, yp):

      

    # Проверьте, совпадают ли два адреса

    if (xp[0] == yp[0]):

        return

    xp[0] = xp[0] + yp[0

    yp[0] = xp[0] - yp[0]

    xp[0] = xp[0] - yp[0]

      
Код водителя

x = [10]

swap(x, x) 

print("After swap(&x, &x): x = ", x[0])

  
# Этот код предоставлен SHUBHAMSINGH10

C #

// C # программа вышеуказанного подхода

using System;

class GFG {

  

    static void swap(int xp, int yp)

    {

        if (xp == yp) // Проверяем, совпадают ли два адреса

            return;

        xp = xp + yp;

        yp = xp - yp;

        xp = xp - yp;

    }

  

    // Код драйвера

    public static void Main()

    {

        int x = 10;

        swap(x, x);

        Console.WriteLine("After swap(&x, &x): x = " + x);

    }

}

  
// Этот код предоставлен Code_Mech.

PHP

<?php

function swap($xp, $yp)

{

    // Проверяем, есть ли два адреса

    // одинаковы

    if ($xp == $yp

        return;

    $xp = $xp + $yp;

    $yp = $xp - $yp;

    $xp = $xp - $yp;

}

  
// Код драйвера

$x = 10;

swap($x, $x);

echo("After swap(&x, &x): x = " . $x);

return 0;

  
// Этот код добавлен
// по Code_Mech.


Выход :

After swap(&x, &x): x = 10

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Как поменять два числа без использования временной переменной?

0.00 (0%) 0 votes