#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[100100];//数字number的位置
cin>>n;
int num=0;
int left=n-1;
for(int i=0;i<n;i++)
{
int number;
cin>>number;
a[number]=i;
if(number==i) {left--;}
}
int k=1;
while(left>0)
{
if (a[0]==0)
{
while(k<n)
{
if(a[k]!=k)
{
swap(a[0],a[k]);
num++;
break;
}
k++;
}
}
while(a[0]!=0)
{
swap(a[0],a[a[0]]);
num++;
left--;
}
}
cout<<num;
system("pause");
return 0;
注意点
1.使用a[num]=i记录num的位置,方便swap的使用
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[100100];//数字number的位置
cin>>n;
int num=0;
int left=n-1;
for(int i=0;i<n;i++)
{
int number;
cin>>number;
a[number]=i;
if(number==i) {left--;}
}
int k=1;
while(left>0)
{
if (a[0]==0)
{
while(k<n)
{
if(a[k]!=k)
{
swap(a[0],a[k]);
num++;
break;
}
k++;
}
}
while(a[0]!=0)
{
swap(a[0],a[a[0]]);
num++;
left--;
}
}
cout<<num;
system("pause");
return 0;
}