自己的基础太差了,连for循环都记错了
是条件不成立是跳出循环 这是个重点
代码如下
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b, a%b);
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
int main()
{
int a[105];
int b[105];
memset(b,0,sizeof(b));
int n;
scanf("%d",&n);
int t=1;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
if(b[a[i]]>=2) t=0;
}
if(t==0) printf("-1\n");
else {
int LCM=1;
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
{
if(b[i]) continue;
int sum=0;
b[i]=1;
int y=i;
while(1){
sum++;
b[a[y]]=1;
y=a[y];
if(y==i) break;
}
if(sum%2==0) sum/=2;
LCM=lcm(LCM,sum);
}
printf("%d\n",LCM);
}
}