/*我的直观想法是用一个数组freq记录学生被抓取的次数,从1到n的循环每次都初始化freq数组元素为0,然后随着指认链向前为freq数组元素赋值,被指认到一次就使得元素值++,一次指认后检查被指认元素的freq值是否> 1,大于1则打印当前学生编号并停止指认循环*/
#include <stdio.h>
#include <stdlib.h>
int main() {
//读取数据
int n;
scanf("%d\n", &n);
int *p = (int *)malloc(sizeof(int) * n);
for(int i = 0; i < n; i++){
scanf("%d", p + i);
}
//建立freq数组
int *freq = (int *)malloc(sizeof(int) * n);
//对每一个学生开始进行计算
for(int a = 0; a < n; a++){
//初始化freq数组
for(int j = 0; j < n; j++){
freq[j] = 0;
}
int cur = a;//当前被指认者,初始化为a
while(1){
freq[cur]++;//被指认者freq++
if(freq[cur] > 1){//freq值大于1即为劝退者,打印结果,结束循环
printf("%d ",cur + 1);
break;
}
cur = p[cur] - 1;//cur转向下一个被指认者
}
}
//释放空间
free(p);
free(freq);
return 0;
}