声明:
本题依旧是用c++讲解,所以别的语言的,懂?
题目一览:
说明
你和小华正在玩纸杯猜数游戏。
小华在桌面上扣放了一排n个纸杯,依次标号为1∼n。每个纸杯内侧写有一个数字。
小华先将每个纸杯上的数字告诉小明,然后他快速的进行了如下m次交换操作:
选择两个纸杯u和v,交换它们的位置。(u,v相同表示本次不交换)
现在小华想让你回答:m次操作后依次排列的纸杯上的数字分别是多少。
输入格式
第一行输入两个数n,m,分别表示纸杯数、操作数(1≤n,m≤50000);
第二行输入n个数,分别表示每个纸杯内侧的数字之后m行,每行两个数u,v,表示将这两个纸杯交换。
输出格式
输出一行n个数,表示交换后每个纸杯内侧的数字依次是多少。以空格隔开。
样例
输入数据 1
8 3
1 4 7 20 5 3 11 6
3 7
2 6
5 3
Copy
输出数据 1
1 3 5 20 11 4 7 6
本题思路:
因为本题只是让换数据而已,所以完全可以建一个临时变量来完成交换。
(不会有人现在就划走了吧)
本题方法:
如何交换两个数的数据:
在思路上我提到过,可以建一个临时变量来交换。所以就得到了以下代码:
假设第一个数是u,第二个数是v:
if(u!=v){
int l=u;
u=v;
v=l;
}
这样,就交换完成了,神不神奇?
(不会又有人划走了吧)
本题需要注意的小瑕疵:
注意啦!本题数组从零开始存的,交换的时候一定要把这里(加粗的地方—》a[下标])给减一啊!
最后的题解:
#include<bits/stdc++.h>
using namespace std;
int a[50010];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
int u,v;
for(int i=1;i<=m;i++){
cin>>u>>v;
if(u!=v){
int l=a[u-1];
a[u-1]=a[v-1];
a[v-1]=l;
}
}
for(int i=0;i<n;i++) cout<<a[i]<<" ";
}
对,就这么简单,所以我讲方法的时候才说应该会有人划走。
总结:
写了这个博客,我教给大家了怎么交换两个变量的数据以及代码,刚知道的要记下来哦😊。