Учитывая две переменные, x и y, меняйте местами две переменные, не используя третью переменную.
Метод 1 (Использование арифметических операторов) Идея состоит в том, чтобы получить сумму в одном из двух заданных чисел. Затем числа можно поменять местами с помощью суммы и вычитания из суммы.
C ++
// C ++ Программа для замены двух чисел без // используя временную переменную #include <bits/stdc++.h>
usingnamespacestd;
intmain()
{
intx = 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>
intmain()
{
intx = 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);
return0;
}
Джава
// Java-программа для замены двух чисел без // используя временную переменную
importjava.*;
classGeeks {
publicstaticvoidmain(String a[])
{
intx = 10;
inty = 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 -y
# х становится 5
x =x -y
print("After Swapping: x =", x, " y =", y);
# Этот код добавлен # Сумит Судхакар
C #
// Программа для замены двух чисел без // используя временную переменную
usingSystem;
classGFG {
publicstaticvoidMain()
{
intx = 10;
inty = 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>
usingnamespacestd;
intmain()
{
intx = 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>
intmain()
{
intx = 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);
return0;
}
Джава
// Java-программа для замены двух чисел // без использования временной переменной
importjava.io.*;
classGFG {
publicstaticvoidmain(String[] args)
{
intx = 10;
inty = 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 # Программа для обмена двумя // номера без использования // временная переменная
usingSystem;
classGFG {
staticpublicvoidMain()
{
intx = 10;
inty = 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>
usingnamespacestd;
intmain()
{
intx = 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;
return0;
}
// Этот код предоставлен mohit kumar.
С
// C-код для обмена с использованием XOR #include <stdio.h>
intmain()
{
intx = 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);
return0;
}
Джава
// Java-код для обмена с использованием XOR
importjava.*;
publicclassGFG {
publicstaticvoidmain(String a[])
{
intx = 10;
inty = 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
usingSystem;
classGFG {
publicstaticvoidMain()
{
intx = 10;
inty = 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>
usingnamespacestd;
voidswap(int* xp, int* yp)
{
*xp = *xp ^ *yp;
*yp = *xp ^ *yp;
*xp = *xp ^ *yp;
}
// Код драйвера
intmain()
{
intx = 10;
swap(&x, &x);
cout<<"After swap(&x, &x): x = "<<x;
return0;
}
// Этот код предоставлен rathbhupendra
С
#include <stdio.h>
voidswap(int* xp, int* yp)
{
*xp = *xp ^ *yp;
*yp = *xp ^ *yp;
*xp = *xp ^ *yp;
}
intmain()
{
intx = 10;
swap(&x, &x);
printf("After swap(&x, &x): x = %d", x);
return0;
}
Джава
classGFG
{
staticvoidswap(int[] xp, int[] yp)
{
xp[0] = xp[0] ^ yp[0];
yp[0] = xp[0] ^ yp[0];
xp[0] = xp[0] ^ yp[0];
}
// Код драйвера
publicstaticvoidmain(String[] args)
{
int[] x = {10};
swap(x, x);
System.out.println("After swap(&x, &x): x = "+ x[0]);
}
}
// Этот код предоставлен Rajput-Ji
python3
defswap(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
functionswap(&$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>
usingnamespacestd;
voidswap(int* xp, int* yp)
{
// Проверяем, совпадают ли два адреса
if(xp == yp)
return;
*xp = *xp + *yp;
*yp = *xp - *yp;
*xp = *xp - *yp;
}
// Код драйвера
intmain()
{
intx = 10;
swap(&x, &x);
cout << "After swap(&x, &x): x = "<< x;
return0;
}
// Этот код предоставлен rathbhupendra
С
#include <stdio.h>
voidswap(int* xp, int* yp)
{
if(xp == yp) // Проверяем, совпадают ли два адреса
return;
*xp = *xp + *yp;
*yp = *xp - *yp;
*xp = *xp - *yp;
}
intmain()
{
intx = 10;
swap(&x, &x);
printf("After swap(&x, &x): x = %d", x);
return0;
}
Джава
// Java-программа вышеуказанного подхода
classGFG {
staticvoidswap(intxp, intyp)
{
if(xp == yp) // Проверяем, совпадают ли два адреса
return;
xp = xp + yp;
yp = xp - yp;
xp = xp - yp;
}
// Код драйвера
publicstaticvoidmain(String[] args)
{
intx = 10;
swap(x, x);
System.out.println("After swap(&x, &x): x = "+ x);
}
}
// Этот код предоставлен Code_Mech.
python3
# Python3 программа вышеуказанного подхода
defswap(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 # программа вышеуказанного подхода
usingSystem;
classGFG {
staticvoidswap(intxp, intyp)
{
if(xp == yp) // Проверяем, совпадают ли два адреса
return;
xp = xp + yp;
yp = xp - yp;
xp = xp - yp;
}
// Код драйвера
publicstaticvoidMain()
{
intx = 10;
swap(x, x);
Console.WriteLine("After swap(&x, &x): x = "+ x);
}
}
// Этот код предоставлен Code_Mech.
PHP
<?php
functionswap($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);
return0;
// Этот код добавлен // по Code_Mech.
Выход :
After swap(&x, &x): x = 10
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме