一  13个字母(a,b,c,d....m),随机从中取五个字母组成一个五个字母的组合(如a,b,c,d,e),同一个组合中不能有重复的字母(如a,b,c,d,d   此组合中重复了d,不可以)。二  共取346个组合,要求各个组合不重复,且每个组合与前面的6个组合相似的字母不多于2个。三  所有的组合中,不能有重复的,如(a,b,c,d,e)与(a,b,d,c,e)视为重复的组合。

解决方案 »

  1.   

    和你之前那个题差不多,改了改
    import java.util.Vector;public class FindChars {

    private Vector<String> org = null;
    private Vector<Five> all = null;
    private Vector<Five> result = null;

    public FindChars() {
    org = new Vector<String>(0);
    result = new Vector<Five>(0);
    for (int i=1;i<14;i++) {
    org.add("" + i);
    }
    all = new Vector<Five>(0);
    createFives();
    for (int j=0;j<346;j++) {
    for (Five five : all) {
    if (addToResult(five)) {
    System.out.println("" + (j+1) + ":" + five.getUID());
    break;
    }
    }
    }
    }

    public boolean addToResult (Five five) {
    for (Five f : result) {
    int same = 0;
    for (String num : f.getNums()) {
    if (five.getNums().contains(num)) {
    same++;
    if (same >=3) {
    return false;
    }
    }
    }
    }
    result.add(five);
    if (result.size() > 6) {
    result.remove(0);
    }
    all.remove(five);
    return true;
    }

    private void createFives() {
    Five five;
    for (int i1=1;i1<10;i1++) {
    for (int i2=i1+1;i2<11;i2++) {
    for (int i3=i2+1;i3<12;i3++) {
    for (int i4=i3+1;i4<13;i4++) {
    for (int i5=i4+1;i5<14;i5++) {
    five = new Five(""+i1, ""+i2, ""+i3, ""+i4, ""+i5);
    all.add(five);
    }
    }
    }
    }
    }
    }

    public static final void main(String arg[]) {
    FindChars xxx = new FindChars();
    }

    class Five {
    private Vector<String> nums = null;
    private String UID = null;

    public Five() {
    nums = new Vector<String>(0);
    }

    public Five(String arg1, String arg2, String arg3, String arg4, String arg5) {
    nums = new Vector<String>(0);
    nums.add(arg1);
    nums.add(arg2);
    nums.add(arg3);
    nums.add(arg4);
    nums.add(arg5);
    }

    public Vector<String> getNums() {
    return nums;
    }

    public String getUID() {
    if (UID == null && nums.size() == 5) {
    UID = "";
    for (String num : nums) {
    switch (Integer.valueOf(num)) {
    case 1:UID += "a" + ".";break;
    case 2:UID += "b" + ".";break;
    case 3:UID += "c" + ".";break;
    case 4:UID += "d" + ".";break;
    case 5:UID += "e" + ".";break;
    case 6:UID += "f" + ".";break;
    case 7:UID += "g" + ".";break;
    case 8:UID += "h" + ".";break;
    case 9:UID += "i" + ".";break;
    case 10:UID += "j" + ".";break;
    case 11:UID += "k" + ".";break;
    case 12:UID += "l" + ".";break;
    case 13:UID += "m" + ".";break;
    }
    }
    }
    return UID;
    }

    }
    }