现在的位置: 首页 > 综合 > 正文

组合问题!

2018年03月29日 ⁄ 综合 ⁄ 共 2207字 ⁄ 字号 评论关闭
现在有n粒骰子,要求打印出这n骰子的所有的组合数字,如122 和221视为同一组:




import java.util.HashMap;
import java.util.Map;


public class AppTest {
public static void main(String[] args) {

int[][] result=compute(5);

println(result);


System.out.println("打印元素数目为:"+getElementsNumber(result, 0));

test(result);

}



public static int[][] compute(int sizeNum){
int sanzi[][]=new int[sizeNum-1][6];
for(int i=0;i<sizeNum-1;i++){
for(int j=1;j<=6;j++){
sanzi[i][j-1]=j;
}
}

int[][] seed=new int[][]{{1},{2},{3},{4},{5},{6}};

int[][] result=compute(sanzi,seed);
return result;
}


public static int[][] compute(int[][] target,int[][] seed){
int[][] result=seed;
for(int i=0;i<target.length;i++){
result=merge(target[i],result);
}
return result;
}

public static int[][] merge(int[] l1,int[][] l2){
int[][] newl=new int[6][];
for(int i=0;i<6;i++){
int eNum=getElementsNumber(l2, i);
int[] subl=new int[eNum];
int index=0;
for(int j=i;j<6;j++){
for(int k=0;k<l2[j].length;k++){
subl[index]=Integer.parseInt(l2[j][k]+""+l1[i]);
index=index+1;
}
}
newl[i]=subl;
}
return newl;
}

public static int getElementsNumber(int[][] target,int index){
int num=0;
for(int i=index;i<target.length;i++){
for(int j=0;j<target[i].length;j++){
num++;
}
}
return num;
}

public static void println(int[][] result){
int elNum=0;
for(int i=0;i<result.length;i++){
for(int j=0;j<result[i].length;j++){
elNum++;
System.out.println(elNum+":"+result[i][j]);
}
}
}


public static void test(int[][] result){
Map hashMap=new HashMap();
int elNum=0;
for(int i=0;i<result.length;i++){
for(int j=0;j<result[i].length;j++){
String str=new Integer(result[i][j]).toString();
str=parseSortString(str);
hashMap.put(str, "");
}
}
int resultNum=getElementsNumber(result, 0);
int hashMapNum=hashMap.keySet().size();

System.out.println(resultNum+"=="+hashMapNum);
}


public static int[] sort(int[] target){
for(int i=0;i<target.length;i++){
for(int j=i+1;j<target.length;j++){
if(target[i]>target[j]){
int temp=target[i];
target[i]=target[j];
target[j]=temp;
}
}
}


// for(int index=0;index<target.length;index++){
// System.out.println(target[index]);
// }

return target;
}


public static String parseSortString(String str){
int[] ints=new int[str.length()];
for(int pos=0;pos<ints.length;pos++){
ints[pos]=Integer.parseInt(new String(new char[]{str.charAt(pos)}));
// System.out.println(ints[pos]);
}
sort(ints);
String newStr="";
for(int i=0;i<ints.length;i++){
newStr=newStr+ints[i]+"";
}

return newStr;
}
}

抱歉!评论已关闭.