题目
很有意思的一道题,想要把你绕晕
假设当前的索引值等于i
,num[i]=i'
,i不等于num[i]
那么就要进行一个交换,把num[i]
中的i'
存到对应的i'
下面去,再把num[i']
里原来存放的值放到num[i]
中,完成一次交换,这样i'
和num[i']
就相互对应了。
然后继续进行判断,还是看i
和num[i]
是否匹配,注意,这里还是原来的i
,而不是i+1
。
上代码
#include<iostream>
using namespace std;
int main()
{
int num[10010]={0};
int N;
cin >> N;
for(int i=1;i<=N;i++){
cin >> num[i];
}
int cnt=0;
for(int i=1;i<=N;i++){
if(i!=num[i]){
int temp=num[i];
num[i]=num[temp];
num[temp]=temp;
cnt++;
i--;
}
}
cout << cnt;
return 0;
}