package com.heyang;
/** *//**
* 诸葛亮要派出五虎上将中的三员执行任务,请列出所有可能的组合
* @author 何杨(heyang78@gmail.com)
*
* @since 2009-2-11 上午08:29:25
* @version 1.00
*/
public class Combiner {
static char[] arr={'关','张','赵','马','黄'};
public static void main(String[] args) {
int[] arr = new int[3];
combine(5, 3, arr);
}
public static void combine(int total, int chooseCount, int selectedArr[]) {
for (int i = total; i >= chooseCount; i--){
selectedArr[chooseCount - 1] = i - 1;
if (chooseCount > 1){
combine(i - 1, chooseCount - 1, selectedArr);
}
else
{
for (int j = selectedArr.length - 1; j >= 0; j--) {
System.out.print(arr[selectedArr[j]] + ",");
}
System.out.println();
}
}
}
}
结果:
1黄,马,赵,
2黄,马,张,
3黄,马,关,
4黄,赵,张,
5黄,赵,关,
6黄,张,关,
7马,赵,张,
8马,赵,关,
9马,张,关,
10赵,张,关,
排列代码:
package com.heyang;
/** *//**
* 全排列代码
* 赵钱孙李四人排队,求所有排队方案
*
* @author 何杨(heyang78@gmail.com)
*
* @since 2009-2-11 下午01:26:45
* @version 1.00
*/
public class Permutation{
public static void main(String[] args){
Character[] arr={'赵','钱','孙','李'};
permutation(arr,0,arr.length);
}
public static void permutation(Object[] arr,int start,int end){
if(start<end+1){
permutation(arr,start+1,end);
for(int i=start+1;i<end;i++){
Object temp;
temp=arr[start];
arr[start]=arr[i];
arr[i]=temp;
permutation(arr,start+1,end);
temp=arr[i];
arr[i]=arr[start];
arr[start]=temp;
}
}
else{
for(int i=0;i<end;i++){
System.out.print(arr[i]);
}
System.out.print("\n");
}
}
}
排列结果:
1赵钱孙李
2赵钱李孙
3赵孙钱李
4赵孙李钱
5赵李孙钱
6赵李钱孙
7钱赵孙李
8钱赵李孙
9钱孙赵李
10钱孙李赵
11钱李孙赵
12钱李赵孙
13孙钱赵李
14孙钱李赵
15孙赵钱李
16孙赵李钱
17孙李赵钱
18孙李钱赵
19李钱孙赵
20李钱赵孙
21李孙钱赵
22李孙赵钱
23李赵孙钱
24李赵钱孙
|