您的位置:首页 > 职场人生

【面试程序】输出排列组合的数字

2007-03-16 17:13 435 查看
***************************************
题目:
输出所有的组合用1,2,3,4,5组合的数字

想法:递归,先挑选出一个数字,然后,剩下的继续进行组合。
直到只剩下两个数字的时候,交换,输出。

代码:
private void wapOut(String change,String stati){
if (change.length() == 2){
String temp = String.valueOf(stati);
System.out.println(temp+change);
System.out.println(temp+change.charAt(1)+change.charAt(0));
}else{
for(int i=0; i<change.length(); i++){
String temp = change.substring(0,i)+change.substring(i+1,change.length());
wapOut(temp,stati+change.substring(i,i+1));
}
}
}

测试:
wapOut("1234",""),输出24个数字
wapOut("12345",""),输出120个数字
***************************************
题目:
用1,2,2,3,4,5,这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234,212345等,
要求:“4”不能排第3位,“1”与“5”不能相连。

思路:先输出所有的组合,然后剔除其中的不符合要求的.

代码:
int num[] = {1, 2, 2, 3, 4, 5};
int total = 0;

private void wapB() {
int len = num.length;
for (int i0 = 0; i0 < len; i0++) {
for (int i1 = 0; i1 < len; i1++) {
for (int i2 = 0; i2 < len; i2++) {
for (int i3 = 0; i3 < len; i3++) {
for (int i4 = 0; i4 < len; i4++) {
for (int i5 = 0; i5 < len; i5++) {
int n[] = new int[]{i0,i1,i2,i3,i4,i5};
if (Same(n) || RepeatOf2(n) || ThirdOf4(n) || Separate15(n)){
continue;
}
GetNum(n);
}
}
}
}
}
}
}

//有数字重复,例如11111
boolean Same(int []n){
for (int i=0; i<n.length; i++){
for(int j=i+1; j<n.length; j++){
if (n[i] == n[j]){
return true;
}
}
}
return false;
}

//因为有两个2,所以要减少一次重复 比如 122345 和 122345
boolean RepeatOf2(int []n){
for (int i=0; i<n.length; i++){
for(int j=i+1; j<n.length; j++){
if ((num[n[i]] == num[n[j]]) && (num[n[i]] == 2) && (n[i]>n[j])){
return true;
}
}
}
return false;
}

//要求
boolean ThirdOf4(int []n){
if (num[n[3]] == 4){
return true;
}
return false;
}

//要求
boolean Separate15(int []n){
for (int i=0; i<n.length; i++){
for(int j=i+1; j<n.length; j++){
if ((num[n[i]] == 1 && num[n[i+1]] == 5) || (num[n[i]] == 5 && num[n[i+1]] == 1)){
return true;
}
}
}

return false;
}

String GetNum(int[] n){
String temp = "";
for (int i=0; i<n.length; i++){
temp += String.valueOf(num[n[i]]);
}
total++;
System.out.println(temp);
return temp;
}

测试:
结果是198,符合.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐