数组组合算法
⑴ 请问多个数组全组合算法怎么写
publicclassMain{
publicstaticvoidmain(Stringargs[]){
System.out.println("主程序中运行");
String[]str1={"a","b"};String[]str2={"c","d"};String[]str3={"e","f"};
intn=str1.length*str2.length*str3.length;
intm=0;
String[]str4=newString[n];
for(inti=0;i<str1.length;i++)
for(intk=0;k<str2.length;k++)
for(intl=0;l<str3.length;l++){
str4[m]=str1[i]+str2[k]+str3[l];
m++;
}
for(intj=0;j<n;j++)
System.out.println(str4[j]);
Mainmain=newMain();
String[]str5=main.fun(str1,str2,str3);
for(intj=0;j<str5.length;j++)
System.out.println(str5[j]);
}
String[]fun(String[]str1,String[]str2,String[]str3){
System.out.println("方法调用,传入3个数组,返回排列数组");
intn=str1.length*str2.length*str3.length;
intm=0;
String[]str4=newString[n];
for(inti=0;i<str1.length;i++)
for(intk=0;k<str2.length;k++)
for(intl=0;l<str3.length;l++){
str4[m]=str1[i]+str2[k]+str3[l];
m++;
}
returnstr4;
}
}
直接主程序可以直接运行的亲,直接主程序和方法调用两种方法都有哦,运行结果如下
⑵ 怎样通过排列组合算法求数字和
排列的定义及其计算公式:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! 此外规定0!=1
排列组合
组合的定义及其计算公式:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。C(n,m)=A(n,m)∧2/m!=A(n,m)/m!; C(n,m)=C(n,n-m)。(其中n≥m)
其他排列与组合公式 从n个元素中取出m个元素的循环排列数=A(n,m)/m=n!/m(n-m)!. n个元素被分成k类,每类的个数分别是n1,n2,...nk这n个元素的全排列数为 n!/(n1!×n2!×...×nk!). k类元素,每类的个数无限,从中取出m个元素的组合数为C(m+k-1,m)。
(2)数组组合算法扩展阅读
1、加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+mn种不同方法。
⒉、第一类办法的方法属于集合A1,第二类办法的方法属于集合A2,……,第n类办法的方法属于集合An,那么完成这件事的方法属于集合A1UA2U…UAn。
⒊、分类的要求 :每一类中的每一种方法都可以独立地完成此任务;两类不同办法中的具体方法,互不相同(即分类不重);完成此任务的任何一种方法,都属于某一类(即分类不漏)。
⑵乘法原理和分步计数法
⒈、 乘法原理:做一件事,完成它需要分成n个步骤,做第一步有m1种不同的方法,做第二步有m2种不同的方法,……,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×m3×…×mn种不同的方法。
⒉、合理分步的要求
任何一步的一种方法都不能完成此任务,必须且只须连续完成这n步才能完成此任务;各步计数相互独立;只要有一步中所采取的方法不同,则对应的完成此事的方法也不同。
参考资料:排列组合的网络