题目链接
题目描述
输入两个正整数\(a\)和\(b\),试交换\(a\)、\(b\)的值(使\(a\)的值等于\(b\),\(b\)的值等于\(a\))。
解题思路
该题有很多种方法,例如:
- 直接输出\(b\)和\(a\)(偷鸡方法)
- 使用
algorithm
库的swap
函数 - 使用额外变量辅助
- 位运算
- \(......\)
但这道题目放在"运算符和表达式"这一章,显然是有出题者的用意,这里比较适合初学者的只有"使用额外变量辅助"这种解。
假设我们现在有三个变量:\(a=12\)、\(b=21\)、\(tmp\),
- 先将\(a\)赋值给\(tmp\),此时三个变量值如下:
\(a=12\)、\(b=21\)、\(tmp=12\) - 再将\(b\)的值赋给\(a\),此时三个变量值如下:
\(a=21\)、\(b=21\)、\(tmp=12\) - 再将\(tmp\)的值赋给\(b\),此时三个变量值如下:
\(a=21\)、\(b=12\)、\(tmp=12\)
这样,我们用\(tmp\)保留\(a\)的值,十分巧妙地交换了\(a\)和\(b\)的值,输出即可。
AC Code
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr);
int a,b,tmp;
cin>>a>>b;
tmp=a;
a=b;
b=tmp;
cout<<a<<" "<<b;
return 0;
}
Tip
tmp=a;
a=b;
b=tmp;
这三句可直接用swap(a,b)
代替,记得包含algorithm
库!!!