日期:2014-05-20  浏览次数:20617 次

请教大侠们一个小题目--新手提问.
1,2,3,4,5几个数字,输出任意的这五个数字的组合,要求:
35不在一起,即   13542     是错误的.
4不在第二位上,即   54213   是错误的.
求输出的组合.

------解决方案--------------------
ding
------解决方案--------------------
你用随机数取出五个数,加上个条件判断,然后填入到对应的数组就好了,如果不想要重复出现的可以写一个循环判断,具体API不会要去查文档。
------解决方案--------------------
这个问题,有过讨论了,你可以搜一下
------解决方案--------------------
这属于高中数学的排列组合问题。
------解决方案--------------------
从别的地方搞到:

class Permutation {

private String CurFixPart;
private String PreGenNum;

public static void main(String[] args){
Permutation p=new Permutation();
p.GenControll( "12345 ");
}

private String shift(String s, int pos){
String newStr;
if (s.length()> pos+1)
newStr=s.substring(pos, pos+1)
+s.substring(0, pos)
+s.substring(pos+1);
else
newStr=s.substring(pos)
+s.substring(0, pos);
return newStr;
}

protected int Validate(String newNum){
String newGenNum=CurFixPart+newNum;
if (Integer.valueOf(newGenNum) <=Integer.valueOf(PreGenNum))
return 0;
if (newGenNum.substring(1,2).equals( "4 ") ||
(newGenNum.indexOf( "35 ")!=-1) ||
(newGenNum.indexOf( "53 ")!=-1))
return 0;

PreGenNum=newGenNum;
System.out.println(newGenNum);
return 0;
}

public void GenControll(String Base) {
PreGenNum= "0 ";
CurFixPart= " ";
GenNext(Base, 0);
}

void GenNext(String varPart, int curPos){
if (varPart.length()==2){
Validate(varPart);
Validate(shift(varPart, 1));
return;
}

String newGen=shift(varPart, curPos);
String SavedFixPart=CurFixPart;
CurFixPart=CurFixPart+newGen.substring(0,1);
GenNext(newGen.substring(1), 0);
CurFixPart=SavedFixPart;

if (curPos==varPart.length()-1)
return;
GenNext(varPart, curPos+1);
}
}