题目的大致含义;老师抓了n个调皮的孩子,要往他们物品上打洞。从任一个孩子开始,打完之后这孩子指向另一个孩子说是他干的,于是另一个孩子也被打上了洞。于是他也指责别人。周而复始,老师发现有一个孩子有两个洞了,所以停止了。
输入;
孩子数目
所有被指的孩子(按顺序132 1先被指后指向3 然后3指2)
输出
从第一个孩子开始。。。。两个洞结束。然后从第二个开始。。。结束,第三个。。结束第n个。。。结束
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>//该题的目的;出现2结束
using namespace std;
int main()
{
int i,p,n,a[1010],b[1010],c[1010]; //比需求的稍大。
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&b[i]);//输入被指的熊孩子
int s=0;
for(i=1;i<=n;i++)
{
memset(a,0,sizeof(a));//每一次都进行数组的从新附零。
a[i]++;
p=b[i];
while(1)
{ //在每一次循环中找到2次的,输出。
a[p]++;
if(a[p]==2)
{
c[++s]=p;
break;
}
p=b[p];
}
}
for(i=1;i<=s;i++)
if(i==1)printf("%d",c[i]);
else printf(" %d",c[i]);
return 0;
}