#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+10;
int pos[maxn];
int main()
{
int n,ans=0;
scanf("%d",&n);
int left=n-1;
int num;
for(int i=0;i<n;i++)
{
scanf("%d",&num);
pos[num]=i;
if(num==i&&num!=0)
{
left–;
}
}
int k=1;
while(left>0)
{
if(pos[0]==0)
{
while(k<n)
{
if(pos[k]!=k)
{
swap(pos[0],pos[k]);
ans++;
break;
}
k++;
}
}
if(pos[0]!=0)
{
swap(pos[0],pos[pos[0]]);
ans++;
left--;
}
}
printf("%d\n",ans);
return 0;
}
该博客主要展示了如何使用C++编程解决序列排列问题,通过一个实例代码演示了如何在给定序列中找到正确的位置并交换元素,以达到序列排列的目的。在代码中,运用了while循环和条件判断来实现这一过程,并计算了交换次数。
436

被折叠的 条评论
为什么被折叠?



