C++程序 交换两个数字
这里,我们将看到如何使用C++程序交换两个数字。以下是示例:
输入: a = 2,b = 3
输出: a = 3,b = 2
输入: a = 0,b = 1
输出: a = 1,b = 0
在C++中有8种交换两个数字的方法
- 使用第三个变量。
- 不使用第三个变量。
- 使用引用调用。
- 使用swap()函数。
- 使用位运算符。
- 使用友元函数。
- 使用算术运算符:*和/。
- 简短的方法
让我们开始讨论这些方法的每个细节。
1.使用第三个变量
这种方法的思路很简单:
- 将a赋值给一个临时变量:temp = a
- 将b赋值给a:a = b
- 将temp赋值给b:b = temp
以下是实现上述方法的C++程序:
// C++程序交换两个数字
//使用第三个变量
#include<bits/stdc++.h>
using namespace std;
//驱动程序
int main()
{
int a = 2,b = 3;
cout << "交换前a = " <<
a << ",b = " << b << endl;
int temp;
temp = a;
a = b;
b = temp;
cout << "交换后a = " << a <<
",b = " << b << endl;
return 0;
}
输出
交换前a = 2,b = 3
交换后a = 3,b = 2
时间复杂度: O(1),因为只进行恒定的操作。
空间复杂度: O(1),因为没有使用额外的空间。
2.不使用第三个变量(使用+和-)
这里将使用以下方法:
- 将a和b的和赋值给b,即b = a + b。
- 将b和a的差赋值给a,即a = b – a。
- 将b和a的差赋值给b,即b = b – a。
以下是实现上述方法的C++程序:
//不使用第三个变量交换两个数字的C++程序
#include<bits/stdc++.h>
using namespace std;
//驱动程序
int main()
{
int a = 2,b = 3;
cout << "交换前a = " <<
a << ",b = " <<b << endl;
b = a + b;
a = b - a;
b = b - a;
cout << "交换后a = " << a <<
",b = " << b << endl;
return 0;
}
输出
交换前a = 2,b = 3
交换后a = 3,b = 2
时间复杂度: O(1),因为只进行恒定的操作。
空间复杂度: O(1),因为没有使用额外的空间。
3.使用引用调用
这里将使用以下方法:
- 创建一个swap函数,该函数将使用第三个变量temp来交换两个数字,如方法1(使用第三个变量)所讨论的。
- 使用引用调用方法传递参数a和b来调用swap函数。
以下是实现上述方法的C++程序:
// C++ program to swap two
// numbers using friend
// function
#include <bits/stdc++.h>
using namespace std;
// class declaration
class Swap
{
private:
int a, b, temp;
public:
Swap(int x, int y) // Constructor
{
a = x;
b = y;
}
friend void swapUsingFriend(Swap &s;);
};
// Friend function definition
void swapUsingFriend(Swap &s;)
{
s.temp = s.a;
s.a = s.b;
s.b = s.temp;
}
// Driver code
int main()
{
Swap s(2, 3);
cout << "Before swapping a = " <<
s.a << " , b = " << s.b << endl;
// Function call to swap
swapUsingFriend(s);
cout << "After swapping a = " <<
s.a << " , b = " << s.b << endl;
return 0;
}
输出
Before swapping a = 2 , b = 3
After swapping a = 3 , b = 2
时间复杂度: O(1) as only constant operations are done.
空间复杂度: O(1) as no extra space has been used.
// 使用友元函数交换两个数字的C++程序
#include <iostream>
using namespace std;
class Swap {
// 声明变量:temp,a和b
int temp, a, b;
public:
Swap(int a, int b) //定义Swap方法
{
this->a = a;
this->b = b;
}
friend void swap(Swap&); //调用友元函数
};
void swap(Swap& s1) //交换值的方法
{
cout << "\nBefore Swapping: " << s1.a << " " << s1.b;
s1.temp = s1.a;
s1.a = s1.b;
s1.b = s1.temp;
cout << "\nAfter Swapping: " << s1.a << " " << s1.b;
}
// Driver Code
int main()
{
// 声明和初始化Swap对象
Swap s(4, 6);
swap(s);
return 0;
}
输出
Before Swapping: 4 6
After Swapping: 6 4
7. 使用算术运算符:* 和 /
在这里,我们将使用算术运算符 * 和 / 来交换两个数字的值。
将a乘以b赋给b,即b=a*b。
将b除以a的结果赋给a,即a=b/a。
将b除以a的结果赋给b,即b=b/a。
下面是实现以上方法的C++程序:
// C++ program to swap two numbers using * and /
#include<bits/stdc++.h>
using namespace std;
// Driver code
int main()
{
int a = 5, b = 8;
cout << "Values before swapping a = " <<
a << " , b = " << b << endl;
b = a * b;
a = b / a;
b = b / a;
cout << "Values after swapping a = " << a <<
" , b = " << b << endl;
return 0;
}
输出
Values before swapping a = 5 , b = 8
Values after swapping a = 8 , b = 5
时间复杂度: O(1),因为只进行常量操作。
空间复杂度: O(1),没有使用额外的空间。
8. 改进和简短的方法
这是一种简化的方法,在使用基本运算符交换两个数字的值时,可以在一行内完成。
下面是实现以上方法的C++程序:
// C++ program to swap two numbers using arithmetic operators.
#include<bits/stdc++.h>
using namespace std;
// Driver code
int main()
{
int a = 5, b = 8;
cout << "Values before swapping a = " <<
a << " , b = " << b << endl;
b = a - b + (a = b);
cout << "Values after swapping a = " << a <<
" , b = " << b << endl;
return 0;
}
输出
Values before swapping a = 5 , b = 8
Values after swapping a = 8 , b = 5
时间复杂度: O(1),因为只进行常量操作。
空间复杂度: O(1),没有使用额外的空间。