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. CentOS8 右键打开后没有终端

    最近研究CentOS8  发现右键打开后没有终端这一项: 1.经过查询发现是没有安装一个包 2.使用命令进行安装并重启: [root@base ~]# yum -y install nautilus- ...

  2. .net core 3.1 在iis上的发布(踩坑)

    写这篇文章的目的是希望像我一样喜欢.net 的人在发布 core到 iis上时少走点弯路 网上找了些资料,其实实际操作比较简单,就是有几个坑很恶心 首先是你的服务器需要有core 的运行环境,安装前先 ...

  3. python100例 1-10

    001 数字重组 题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? for i in range(1,5): for j in range(1,5): for k ...

  4. shell脚本命令 运行python文件&python命令行运行python代码

    单独的python文件运行的时候 报错: 在shell脚本中,运行shell脚本命令:在Python命令行中,运行Python代码.然而,“python hello.py”是一个脚本命令,不是pyth ...

  5. Spring全家桶之SpringMVC(三)

    Spring MVC单个接收表单提交的数据   单个接收表单提交的参数 在实际开发中通过会在spring MVC的Controller里面接收表单提交过来的参数,这块代码该怎么去编写呢? 示例: 编写 ...

  6. 读懂操作系统(x86)之堆栈帧(过程调用)

    前言 为进行基础回炉,接下来一段时间我将持续更新汇编和操作系统相关知识,希望通过屏蔽底层细节能让大家明白每节所阐述内容.当我们写下如下C代码时背后究竟发生了什么呢? #include <stdi ...

  7. c++简单string实现

    string.h #pragma once class string { public: string(const char* str = nullptr); string(const string& ...

  8. 观察者模式C++实现

    #include <iostream> #include <vector> #include <string> using namespace std; typed ...

  9. easyui及读取xml

    本地测试地址例如http://localhost:6541/TreeExam/AuthorityTree TreeExam 是TreeExamController AuthorityTree是Tree ...

  10. 一文读懂Java注解

    什么是注解 Java官方文档上说,注解是元数据的一种形式,它提供不属于程序一部分的数据,注解对被注解的代码没有直接的影响. 准确上说,注解只不过是一种特殊的注释而已,如果没有解析它的代码,它可能连注释 ...