主要思路
主要思路就是数字先生找椅子坐,在没有匹配之前主要的目的就是让0先生、1先生、2先生等人分别做到对应的0座位、1座位、2座位等座位,直到有一个数字先生发现自己所属的座位有一个和自己一模一样的人。
代码
#include<iostream>
using namespace std;
int main()
{
bool func(int nums[],int length,int *p);
int a[10] = {2,3,5,2,2,4,6,8,9,1};
int *p = a; //指针使用之前要初始化
func(a,10,p);
cout<<*p<<endl;
}
bool func(int nums[],int length,int *p)
{
for(int i=0;i<length;i++)
{
cout<<i<<endl;
while(nums[i] != i) //人不在合适的位置上
{
if(nums[i] == nums[nums[i]]) //发现有人坐到了自己的位置上面
{
cout<<nums[i]<<endl;
*p = nums[i];
cout<<"not here"<<endl;
return true;
}
//目的是为了nums[nums[i]] = nums[i] //让人做到属于他自己的位置上面
/*
这样写代码实在是太丑了
temp = nums[nums[i]];
nums[nums[i]] = nums[i]; //key
nums[i] = temp;
*/
cout<<"unchanged"<<endl;
int temp = nums[i];
nums[i] = nums[temp];
nums[temp] = temp;
cout<<"changed"<<endl;
}
}
return false;
}