java编程小题

题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
2026年09月23日 11:14
有2个网友回答
网友(1):

public class ddd {
private int count = 0;

public void calculate()
{
String eleStr = "122345";
depthSearch(eleStr, "");
System.out.println("符合条件的总结果数为:" + count + "条");
}

public void depthSearch(String eleStr, String rstStr)
{
if (eleStr.length() == 0)
{
count++;
System.out.println(rstStr);
return;
}
for (int i = 0; i < eleStr.length(); i++)
{
String currEle = eleStr.substring(i, i + 1); // 取出当前位的值
if (rstStr.length() == 2 && "4".equals(currEle))
continue; // 剪掉第三位为4的分支
if (rstStr.endsWith("3") && "5".equals(currEle))
continue; // 剪掉"35"相连的分支
if (rstStr.endsWith("5") && "3".equals(currEle))
continue; // 剪掉"53"相连的分支
if (eleStr.substring(0, i).indexOf(currEle) != -1)
continue; // 剪掉同一位上字符重复的分支(此题即剪掉重复的2)
depthSearch(eleStr.substring(0, i) + eleStr.substring(i + 1),
rstStr + currEle); // 用剩余的合法串继续递归
}
}

public static void main(String add[]){
new ddd().calculate();

}

}

网友(2):

测试通过

import java.util.ArrayList;
import java.util.List;

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

int[] nums = {1, 2,2,3,4,5};

List list = new ArrayList();//保存所有符合条件的组合

for(int i = 0; i < nums.length; i++){//1
for(int j= 0; j < nums.length; j++){//2
if(i != j){
for(int k = 0; k < nums.length; k++){//3
if(k != i && k != j){
if(nums[k] == 4){
continue;
}else{
for(int m = 0; m < nums.length; m++){//4
if(m != i && m != k && m != j){
for(int n = 0; n < nums.length; n++){//5
if(n!= i && n!=j && n!= k && n!= m){
for(int p = 0; p < nums.length; p++){//6
if(p != i && p != j && p!=k && p!=m && p!=n){
StringBuffer sb = new StringBuffer();
sb.append(nums[i]);
sb.append(nums[j]);
sb.append(nums[k]);
sb.append(nums[m]);
sb.append(nums[n]);
sb.append(nums[p]);

String str = sb.toString();
if(!(str.contains("35") || str.contains("53"))){
list.add(str);
System.out.println(str);
}
}
}
}
}
}
}
}
}
}
}
}

}

}

}