B. Badge-找出有两个徽章的人

题目链接

题目大意:具体的也不是很清楚,就看懂了从i=1开始,开始循环,知道出现一个访问次数等于2的那个就是这次循环的答案,

然后再从i=2开始循环,直到出现一个访问次数等于二的那个就是i=2循环的答案,最后输出全部从i=1到i=n的循环答案就行

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#define N 1005
using namespace std;
int main()
{
    int n,a[N];
    int vis[N];
    int ans[N];
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];


    for(int i=1;i<=n;i++)
    {
        memset(vis,0,sizeof(vis));
        vis[i]++;
        int p=a[i];
        while(1)
        {
            vis[p]++;
            if(vis[p]==2)
            {
                ans[i]=p;
                break;
            }
            p=a[p];
        }
    }
    for(int i=1;i<=n;i++)
        cout<<ans[i]<<" ";
    cout<<endl;
}

猜你喜欢

转载自blog.csdn.net/wentong_Xu/article/details/81635578
今日推荐