目录

题目描述

Java习题练习:1241 Permutation_eclipse


Java习题练习:1241 Permutation_java_02

置换的相关知识

链接: 置换(群)&(J Just Shuffle).

题解

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner (System.in);//输入的前提语句
int k=in.nextInt();//输入k
int [] x=new int[101];//定义数组
for(int i=0;i<k;i++) {//样例循环
int n=in.nextInt();//n个数字
for(int j=1;j<=n;j++) {//输入数组
x[j]=in.nextInt();
}
long res=1;//因为存贮最小公倍数的取值,所以初始值为1
for(int z=1;z<=n;z++) {
int p=x[z];
long tmp=1;//p已经变化了一次了,所以初始值为1
while(p!=z) {
p=x[p];
tmp++;
}
res=res*tmp/gcd(res,tmp);//求得最大公约数,即可求得最大公倍数
}
System.out.println(res);//输出答案

}
}
//gcd求最大公约数,辗转相除法
static long gcd(long a,long b) {
if(b==0) {//请不要照抄我的代码
return a;//稍微改改变量名之类的
}
else {
return gcd(b,a%b);
}
}
}