#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
int pos[maxn];
int main()
{
int n,ans=0;
cin>>n;
int left=n-1,num; //left存放除0以外不在本位上的数
for(int i=0;i<n;i++){
cin>>num;
pos[num]=i;
if(num==i&&num!=0){ //除0以外有在本位上的数
left--;
}
}
int k=1; //存放除0以外当前不在本位上的最小数
while(left>0){
if(pos[0]==0){
while(k<n){
if(pos[k]!=k){
swap(pos[0],pos[k]);
ans++;
break;
}
k++;
}
}
while(pos[0]!=0){
swap(pos[0],pos[pos[0]]);
ans++;
left--;
}
}
cout<<ans<<endl;
return 0;
}
最近完全不想学习,代码是晴神的-_-||