[转载]A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞

A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
   1. 如果A参加,B也参加;
   2. 如果C不参加,D也不参加;
   3. A和C中只能有一个人参加;
   4. B和D中有且仅有一个人参加;
   5. D、E、F、G、H 中至少有2人参加;
   6. C和G或者都参加,或者都不参加;
   7. C、E、G、I中至多只能2人参加   
   8. 如果E参加,那么F和G也都参加。
   9. 如果F参加,G、H就不能参加
   10. 如果I、J都不参加,H必须参加
请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列,用空格分隔。
比如:
C D G J
就是一种可能的情况。




package other;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.TreeSet;
import java.util.Vector;

public class arrays {
public static void main(String[] args) throws IOException {
Vector<Character> vec=new Vector<Character>();
vec.add('a');
vec.add('b');
vec.add('c');
vec.add('d');
vec.add('e');
vec.add('f');
vec.add('g');
vec.add('h');
vec.add('i');
vec.add('j');
//遍历所有vec的组合 并进行判断
Vector<Vector<Character>> vec1=new Vector<Vector<Character>>();
Vector<Character> v1=new Vector<Character>();
Vector<Character> v2=new Vector<Character>();
v2.add('a');
vec1.add(v1);
vec1.add(v2);
vec1=f(vec1,'b');
vec1=f(vec1,'c');
vec1=f(vec1,'d');
vec1=f(vec1,'e');
vec1=f(vec1,'f');
vec1=f(vec1,'g');
vec1=f(vec1,'h');
vec1=f(vec1,'i');
vec1=f(vec1,'j');
        for (int i = 0; i < vec1.size(); i++) {
if(judgment(vec1.get(i))){
System.out.println(vec1.get(i));
}
}
}

public static Vector<Vector<Character>> f(Vector<Vector<Character>> vec,char c){//一个字符一个字符的添加 先复制一遍已有的vec  然后每个vec后面添加一个c 加入到返回re中
Vector<Vector<Character>> re=new Vector<Vector<Character>>();
Vector<Character> temp;
for (int i = 0; i < vec.size(); i++) {
temp=new Vector<Character>();
for (int j = 0; j < vec.get(i).size(); j++) {
temp.add(vec.get(i).get(j));
}
re.add(temp);
}
for (int i = 0; i < vec.size(); i++) {
temp=new Vector<Character>();
for (int j = 0; j < vec.get(i).size(); j++) {
temp.add(vec.get(i).get(j));
}
temp.add(c);
re.add(temp);
}
return re;
}
    public static boolean judgment(Vector<Character> vec){//判断该vec是否符合条件
    int a,b,c,d,e,f,g,h,i,j;
    a=vec.indexOf('a');
    b=vec.indexOf('b');
    c=vec.indexOf('c');
    d=vec.indexOf('d');
    e=vec.indexOf('e');
    f=vec.indexOf('f');
    g=vec.indexOf('g');
    h=vec.indexOf('h');
    i=vec.indexOf('i');
    j=vec.indexOf('j');
    if(a!=-1&&b==-1){
    return false;
    }
    if(c==-1&&d!=-1){
    return false;
    }
    if(a!=-1&&c!=-1){
    return false;
    }
    if(b==-1&d==-1){
    return false;
    }
    if(b!=-1&&d!=-1){
    return false;
    }
    int count=0;
    if(d==-1)count++;
    if(e==-1)count++;
    if(f==-1)count++;
    if(g==-1)count++;
    if(h==-1)count++;
    if(count>=4){
    return false;
    }
    count=0;
    if(c==-1)count++;
    if(e==-1)count++;
    if(g==-1)count++;
    if(i==-1)count++;
    if(count<=1){
    return  false;
    }
    if(c!=-1&&g==-1){
    return false;
    }
    if(c==-1&&g!=-1){
    return false;
    }
    if(e!=-1&&f==1){
    return false;
    }
    if(e!=-1&&g==-1){
    return false;
    }
    if(f!=-1&&g!=-1){
    return false;
    }
    if(f!=-1&&h!=-1){
    return false;
    }
    if(i==-1&&j==-1&&h==-1){
    return false;
    }
   
    return true;
    }
}
嘻嘻 好有成就感哦  O(∩_∩)O~  但感觉方法是笨了一点  


原文地址:https://www.cnblogs.com/liuzhuqing/p/7480673.html