您的位置:首页 > 其它

排列组合算法题目

2013-01-10 17:50 218 查看
package com.evertrip.etdspro.test.zf.dotw;

/**
* 从指定数组中取出任意个数 , 使其和为m (不可重复取)
* 思路:以任意组合一个数组为基础。
* @author zhoufeng
*
*/
public class Zuhe4 {

static void printArray(int array [], int len){
for (int i = 0; i < len; i++) {
System.out.print(array[i] + "  ");
}
System.out.println();
}

/**
* 从array里面组合n个元素 ,使其和等于m
*/
static void beibao(int array[] , int tmp[] , int arrayIndex , int tmpIndex , int sum , int m ){

for (int i = arrayIndex ; i < tmp.length; i++) {
tmp[tmpIndex] = array[i];
int result = sum + array[i];  // 这里千万不要用 sum += array[i] ; 否则会印象下一轮循环
if(result == m)
printArray(tmp , tmpIndex + 1);
else if(result > m){
return ;
}
beibao(array , tmp , i + 1 , tmpIndex + 1 , result , m);
}
}

static void beibao(int array[] , int m){
beibao(array , new int[array.length] , 0  , 0 ,0 , m);
}

public static void main(String[] args) {
int array [] = {1 , 2,  3 , 4 , 5};
beibao(array , 6);
}

}


package com.zf.action;

/**
* 从指定数组中取出n个数 , 使其和为m  (可重复取)
* 思路:以从数组中组合n个元素为基础
* @author zhoufeng
*
*/
public class ZhuHe01 {

static void printArray(int array[]){
for (int i : array) {
System.out.print(i + "  ");
}
System.out.println();
}

static void zhuhe(int[] array , int tmp[] , int arrayIndex , int tmpIndex , int sum , int m ){
if(tmpIndex == tmp.length){
if(sum == m)
printArray(tmp);
return ;
}
for (int i = arrayIndex; i < array.length; i++) {
tmp[tmpIndex] = array[i];
int result = sum + array[i];
if(result > m)
return ;
zhuhe(array ,tmp , i ,  tmpIndex + 1 , result , m);
}

}

static void zhuhe(int array[] , int len , int m){
zhuhe(array , new int[len] , 0 , 0  , 0 , m) ;
}

public static void main(String[] args) {
int array[] = {1 , 2 , 3, 4 , 5 ,6 , 7 , 8 ,9 };
zhuhe(array , 3 , 10);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: