package learn
import java.util
class pailiezuhe {
//获取组合数
def getzuhe_num(n:Int,m:Int):Int={
getpailie_num(n,m,0)/getpailie_num(m,m,0)
}
def swap(data:Array[String],i:Int,j:Int): Unit =
{
var temp = data(i)
data(i)=data(j)
data(j)=temp
}
//输出所有组合可能
def print_zuhe(data:Array[String],selected:Array[String],n:Int,index:Int): Unit ={
if(index>=n)
{
selected.foreach(item=>print(item) )
println()
}
else
{
for(i <- index to data.length-(n-index)){
selected(index)=data(i)
//
print_zuhe(data,selected,n,i+1)
}
}
}
//全排列输出
def print_pailie(data:Array[String],index:Int): Unit ={
if(index>=data.length-1)
{
data.map(item => print(item))
println("----")
}
else {
for(i <- index until data.length){
swap(data,index,i)
print_pailie(data,index+1)
swap(data,index,i)
}
}
}
//获取排列数
def getpailie_num(n:Int,m:Int,index:Int):Int={
/*
n=4 m =2
num = 4*3 = 12
n=4 m =4
num = 4*3*2*1
n=4 m=3
num = 4*3*2
n*(n-1)*(n-2),
*/
if(index==m)
1
else
//index < m
(n-index)*getpailie_num(n,m,index+1)
}
}
object pailiezuhe{
var pailiezuhe = new pailiezuhe
def main(args:Array[String]): Unit =
{
println(pailiezuhe.getpailie_num(4,2,0))
println(pailiezuhe.getzuhe_num(3,2))
/*
formatfa bin mxk
bin formatfa mxk
max forma bin
*/
var arrayTest = Array("FormatFa","Bin","mxk")
print("arrarLen:"+arrayTest.length)
pailiezuhe.print_pailie(arrayTest,0)
pailiezuhe.swap(arrayTest,0,2)
print(arrayTest.map(item=>println(item)))
var arrayTest2 = Array("1","2","3")
var selected = new Array[String](arrayTest2.length)
pailiezuhe.print_zuhe(arrayTest2,selected,3,0 )
/*
1,2,3,4
*/
}
}
输出个别排序可以先获取组合,在输出每个的全排列