zoukankan      html  css  js  c++  java
  • [转载]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~  但感觉方法是笨了一点  


  • 相关阅读:
    多线程-死锁代码示例
    区块链技术:以太方学习文档
    svn 不能校验路径“XXX”的锁;没有匹配的可用锁令牌 故障解决方法
    Oracle ORA-27102的解决办法(out of memory)
    Linux常用命令语法+示例
    Java如何实现form表单提交的数据自动对应实体类(源码)
    Java分布式锁看这篇就够了
    quartz时间配置
    volatile 实现原理
    == 和 equals()的区别
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480673.html
Copyright © 2011-2022 走看看