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 com.liu.ex4;

import java.util.ArrayList;
import java.util.Collections; public class Main {
public static ArrayList<Integer> list = new ArrayList<Integer>(); public boolean judge1() {
boolean judge = true;
if(list.contains(0)) {
if(!list.contains(1))
judge = false;
}
return judge;
} public boolean judge2() {
boolean judge = true;
if(!list.contains(2)) {
if(list.contains(3))
judge = false;
}
return judge;
} public boolean judge3() {
boolean judge = true;
if(list.contains(0)) {
if(list.contains(2))
judge = false;
}
return judge;
} public boolean judge4() {
boolean judge = false;
if(list.contains(1) && !list.contains(3))
judge = true;
else if(!list.contains(1) && list.contains(3))
judge = true;
return judge;
} public boolean judge5() {
boolean judge = false;
int count = 0;
for(int i = 3;i <= 7;i++) {
if(list.contains(i))
count++;
}
if(count >= 2)
judge = true;
return judge;
} public boolean judge6() {
boolean judge = false;
if(list.contains(2) && list.contains(6))
judge = true;
else if(!list.contains(2) && !list.contains(6))
judge = true;
return judge;
} public boolean judge7() {
boolean judge = false;
int count = 0;
if(list.contains(2))
count++;
if(list.contains(4))
count++;
if(list.contains(6))
count++;
if(list.contains(8))
count++;
if(count <= 2)
judge = true;
return judge;
} public boolean judge8() {
boolean judge = true;
if(list.contains(4)) {
if(list.contains(5) == false || list.contains(6) == false)
judge = false;
}
return judge;
} public boolean judge9() {
boolean judge = true;
if(list.contains(5)) {
if(list.contains(6) || list.contains(7))
judge = false;
}
return judge;
} public boolean judge10() {
boolean judge = true;
if(!list.contains(8) && !list.contains(9)) {
if(!list.contains(7))
judge = false;
}
return judge;
} public boolean check() {
if(judge1() && judge2() && judge3() && judge4() && judge5()) {
if(judge6() && judge7() && judge8() && judge9() && judge10())
return true;
}
return false;
} public void dfs(int step) {
while(step < 10) {
list.add(step);
if(check()) {
ArrayList<Integer> tempList = new ArrayList<Integer>();
for(int i = 0;i < list.size();i++)
tempList.add(list.get(i));
Collections.sort(tempList);
for(int i = 0;i < tempList.size();i++) {
char temp = (char) ('A' + tempList.get(i));
System.out.print(temp+" ");
}
System.out.println();
}
step++;
dfs(step);
list.remove(list.size() - 1);
}
} public static void main(String[] args) {
Main test = new Main();
test.dfs(0);
}
}

java实现逻辑推断的更多相关文章

  1. 译:Java局部变量类型推断(Var类型)的26条细则

    原文链接:https://dzone.com/articles/var-work-in-progress 作者:Anghel Leonard 译者:沈歌 Java局部变量类型推断(LVTI),简称va ...

  2. 从零開始开发Android版2048 (三)逻辑推断

    近期工作比較忙,所以更新的慢了一点,今天的主要内容是关于Android版2048的逻辑推断,经过本篇的解说,基本上完毕了这个游戏的主体部分. 首先还是看一下,我在实现2048时用到的一些存储的数据结构 ...

  3. Java面试题精选(三) JSP/Servlet Java面试逻辑题

    --   JSP/Servlet  Java面试逻辑题   --     很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...

  4. Java中String推断相等equals与==的差别以及StringBuilder的equals

    Java中String类型具有一个equals的方法能够用于推断两种字符串是否相等,可是这样的相等又与运算符==所推断的"相等"有所不同,接下来进行分析,结论由程序进行验证 Str ...

  5. java 开发业务逻辑的思考(1)- 通知短信发送

    坚持每天写一个总结的博客,今天又是一个新的开始! 今天我要说的是一个关于发送短信通知发送的问题.具体的业务流程是这样的,现在需要对用户的一个提现的申请进行审核,审核的内部需要控制很多的业务, 1.检查 ...

  6. java python oracle推断字符串是否为数字的函数

    java public boolean isNumeric(String str){ Pattern pattern = Pattern.compile("^-?[0-9]+\\.?[0-9 ...

  7. java运算符-逻辑、三元运算符

    1.逻辑运算符 逻辑运算符,它是用于布尔值进行运算的,运算的最终结果为布尔值true或false. 运算符 运算规则 范例 结果 & 与 false&true False | 或 fa ...

  8. java的逻辑与和短路与

    逻辑与 --& 短路与 -- && 只说一个最大的区别,平时我们用的最多的是 短路与来进行逻辑判断: 短路与(或)会从左往右逐个判断式子,只要能得出结果后面的式子不再判断.逻辑 ...

  9. JAVA面试逻辑题1

    一.计算推理 烧香问题: 有两根不均匀分布的香,每一根烧完的时间都是一小时.用什么办法确定一段15分钟的时间? 解题步骤: 1.点燃第一根的两头,同时点燃第二根的一头: 2.等到第一根燃尽以后,再点燃 ...

随机推荐

  1. Akko海洋之星

    今天(2020.5.14)入手Akko海洋之星84茶轴,开心呀~~ 考虑方面: 价格>键线分离>接线接口>轴体>键帽>材质 价格: 200~500之间入门级cherry轴 ...

  2. mysql连表查空,查询第二张表中没有第一张表中的数据

    select consumer_id,user_name,mobile,invite_code from csr_consumer where invite_count<(select coun ...

  3. git --添加多个文件

    今天测试,发现之前写的auto testcase,有好多发生了改变,因此需要修改脚本重新上传至git当中. 对好几个test case script 进行了修改,之前只是一个一个的修改,这次是多个,经 ...

  4. ES6-10笔记(二)

    class类 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类) ...

  5. 「雕爷学编程」Arduino动手做(13)——触摸开关模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  6. CPU 多核指令 —— WFE 原理【原创】

    转自:http://tinylab.org/arm-wfe/ Zhang Binghua 创作于 2020/05/19 打赏 微信公众号   知识星球 关注 @泰晓科技 与数千位一线 Linux 工程 ...

  7. Django之ORM配置与单表操作

    ORM数据库操作流程: 1.    配置数据库(项目同名包中settings.py和__init__.py) 2.    定义类(app包中models.py),执行建表命令(Tools---> ...

  8. python3.x 基础四:json与pickple

    每次打开一个文件,只dump1次 json.dump(dump的内容,文件句柄) json.load(文件句柄) json可以处理列表/字典/字符串等简单数据类型,但是不能处理复杂的数据类型,如函数的 ...

  9. Spring @Qualifier 注释

    可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配. 在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指 ...

  10. 树状数组区间更新区间查询以及gcd的logn性质

    题目描述 给你一个长为n的序列a m次查询 每次查询一个区间的所有子区间的gcd的和mod1e9+7的结果 输入描述: 第一行两个数n,m之后一行n个数表示a之后m行每行两个数l,r表示查询的区间 输 ...