有 N 个瓶子,编号 1 ∼ N,放在架子上。
比如有 5 个瓶子:
2 1 3 5 4
要求每次拿起 2 个瓶子,交换它们的位置。
经过若干次后,使得瓶子的编号为:
1 2 3 4 5
对于这么简单的情况,显然,至少需要交换 2 次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入格式:
- 第一行包含一个整数 N,表示瓶子数量(1 ≤ N ≤ 10000)
- 第二行包含 N 个整数,表示瓶子目前的排列(保证是 1 ∼ N 的排列)
输出格式:
- 输出一个整数,表示最少需要交换多少次
样例输入1:
5 3 1 2 5 4
样例输出1:
3
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
// 请在此输入您的代码
int n;cin>>n;
int a[10005];
for(int i=1;i<=n;i++){
cin>>a[i];
}
int c=0;
for(int i=1;i<=n;i++){
if(i!=a[i]){
for(int j=i+1;j<=n;j++){
if(a[j]==i){
swap(a[i],a[j]);
c++;
break;
}
}
}
}
cout<<c;
return 0;
}