像这样排列组合的问题其实非常简单的啊,就是把每一位的所有可能性相乘就行了,比如你说的这个就是4位,每一位的选择范围是26,那就是26*26*26*26=26^4=456976
26个小写字母可以组成358800个4位数密码。 第一个空有26中选择 第二个空 因为不能重复 所以就只有25种选择,同理 第三个空24种 第四个空23中选择 所以 总共的可能为:
26*25*24*23=358800(种)
26个字母,不考虑大小写的话,就是26选4的组合。
方案有 26!/4!/(26-4)! = 14950种。
如果全部输出,篇幅太大。
写了一段代码用来输出,限于篇幅,只能选择部分。
您可以修改代码,在电脑上输出全部答案。
附:计算结果和fortran代码
package test;
import java.util.HashSet;
import java.util.Set;
import com.alibaba.fastjson.JSONObject;
public class Test{
public static void main(String[] args){
System.out.println(JSONObject.toJSONString(question1()));
System.out.println(JSONObject.toJSONString(question2()));
System.out.println(JSONObject.toJSONString(question3()));
System.out.println(JSONObject.toJSONString(question4()));
}
public static String[] arr={"a","b","c","d","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
/**
* @Description:26个纯字母不分大小写,按4位组合,可重复。求出各种组合结果
* @return
* @date: 2017年11月18日 下午1:47:39
*/
public static SetString question1(){
SetString set=new HashSetString();
for(int i=0;iarr.length;i++){
String l1=arr[i];
for(int j=0;jarr.length;j++){
String l2=arr[j];
for(int k=0;karr.length;k++){
String l3=arr[k];
for(int m=0;marr.length;m++){
String l4=arr[m];
String result=l1+l2+l3+l4;
set.add(result);
}
}
}
}
return set;
}
/**
* @Description:26个纯字母不分大小写,按4位组合,不可重复。求出各种组合结果
* @return
* @date: 2017年11月18日 下午1:57:31
*/
public static SetString question2(){
SetString set=new HashSetString();
for(int i=0;iarr.length;i++){
String l1=arr[i];
for(int j=0;jarr.length;j++){
if(j!=i){
String l2=arr[j];
for(int k=0;karr.length;k++){
if(k!=ik!=j){
String l3=arr[k];
for(int m=0;marr.length;m++){
if(m!=im!=jm!=k){
String l4=arr[m];
String result=l1+l2+l3+l4;
set.add(result);
}
}
}
}
}
}
}
return set;
}
/**
* @Description:26个纯字母不分大小写,按5位组合,可重复。求出各种组合结果
* @return
* @date: 2017年11月18日 下午1:47:39
*/
public static SetString question3(){
SetString set=new HashSetString();
for(int i=0;iarr.length;i++){
String l1=arr[i];
for(int j=0;jarr.length;j++){
String l2=arr[j];
for(int k=0;karr.length;k++){
String l3=arr[k];
for(int m=0;marr.length;m++){
String l4=arr[m];
for(int n=0;narr.length;n++){
String l5=arr[n];
String result=l1+l2+l3+l4+l5;
set.add(result);
}
}
}
}
}
return set;
}
/**
* @Description:26个纯字母不分大小写,按5位组合,不可重复。求出各种组合结果
* @return
* @date: 2017年11月18日 下午1:57:31
*/
public static SetString question4(){
SetString set=new HashSetString();
for(int i=0;iarr.length;i++){
String l1=arr[i];
for(int j=0;jarr.length;j++){
if(j!=i){
String l2=arr[j];
for(int k=0;karr.length;k++){
if(k!=ik!=j){
String l3=arr[k];
for(int m=0;marr.length;m++){
if(m!=im!=jm!=k){
String l4=arr[m];
for(int n=0;narr.length;n++){
if(m!=im!=jm!=k){
String l5=arr[n];
String result=l1+l2+l3+l4+l5;
set.add(result);
}
}
}
}
}
}
}
}
}
return set;
}
}
上面是代码,结果集非常的大。
可以组成38955840个四位数。
排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数。