把输入的值映射成输入对对应的下标用d数组保存起来
d[c[x]]=x 然后遍历数组 遇到不一样的 交换即可
代码
blablabla
#include<stdio.h>
int a[10005];
int c[10005];
int d[10005];
int ans;
int N;
void swap(int x,int y){
//让x位置和y位置的数交换
int t=c[x];
c[x]=c[y];
c[y]=t;
d[c[x]]=x;
d[c[y]]=y;
}
int main(){
scanf("%d",&N);
for(int i=1;i<=N;i++){
scanf("%d",&c[i]);
d[c[i]]=i;
}
for(int i=1;i<=N-1;i++){
if(c[i]==i){
continue;
}
swap(i,d[i]);
ans++;
}
printf("%d",ans);
return 0;
}