java实现逻辑推断
A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
- 如果A参加,B也参加;
- 如果C不参加,D也不参加;
- A和C中只能有一个人参加;
- B和D中有且仅有一个人参加;
- D、E、F、G、H 中至少有2人参加;
- C和G或者都参加,或者都不参加;
- C、E、G、I中至多只能2人参加
- 如果E参加,那么F和G也都参加。
- 如果F参加,G、H就不能参加
- 如果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实现逻辑推断的更多相关文章
- 译:Java局部变量类型推断(Var类型)的26条细则
原文链接:https://dzone.com/articles/var-work-in-progress 作者:Anghel Leonard 译者:沈歌 Java局部变量类型推断(LVTI),简称va ...
- 从零開始开发Android版2048 (三)逻辑推断
近期工作比較忙,所以更新的慢了一点,今天的主要内容是关于Android版2048的逻辑推断,经过本篇的解说,基本上完毕了这个游戏的主体部分. 首先还是看一下,我在实现2048时用到的一些存储的数据结构 ...
- Java面试题精选(三) JSP/Servlet Java面试逻辑题
-- JSP/Servlet Java面试逻辑题 -- 很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...
- Java中String推断相等equals与==的差别以及StringBuilder的equals
Java中String类型具有一个equals的方法能够用于推断两种字符串是否相等,可是这样的相等又与运算符==所推断的"相等"有所不同,接下来进行分析,结论由程序进行验证 Str ...
- java 开发业务逻辑的思考(1)- 通知短信发送
坚持每天写一个总结的博客,今天又是一个新的开始! 今天我要说的是一个关于发送短信通知发送的问题.具体的业务流程是这样的,现在需要对用户的一个提现的申请进行审核,审核的内部需要控制很多的业务, 1.检查 ...
- java python oracle推断字符串是否为数字的函数
java public boolean isNumeric(String str){ Pattern pattern = Pattern.compile("^-?[0-9]+\\.?[0-9 ...
- java运算符-逻辑、三元运算符
1.逻辑运算符 逻辑运算符,它是用于布尔值进行运算的,运算的最终结果为布尔值true或false. 运算符 运算规则 范例 结果 & 与 false&true False | 或 fa ...
- java的逻辑与和短路与
逻辑与 --& 短路与 -- && 只说一个最大的区别,平时我们用的最多的是 短路与来进行逻辑判断: 短路与(或)会从左往右逐个判断式子,只要能得出结果后面的式子不再判断.逻辑 ...
- JAVA面试逻辑题1
一.计算推理 烧香问题: 有两根不均匀分布的香,每一根烧完的时间都是一小时.用什么办法确定一段15分钟的时间? 解题步骤: 1.点燃第一根的两头,同时点燃第二根的一头: 2.等到第一根燃尽以后,再点燃 ...
随机推荐
- Mysql 常用函数(1)- 常用函数汇总
Mysql常用函数的汇总,可看下面系列文章 Mysql常用函数有哪几类 数值型函数 字符串型函数 日期时间函数 聚合函数 流程控制函数 数值型函数 函数名称 作用 ABS 求绝对值 SQRT 求二次方 ...
- 【图机器学习】cs224w Lecture 8 & 9 - 图神经网络 及 深度生成模型
目录 Graph Neural Network Graph Convolutional Network GraphSAGE Graph Attention Network Tips Deep Gene ...
- sqli-labs之Page-3
第三十八关:堆叠注入 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; /* execute multi query */ ...
- bootstrap基本页面
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 格式转换工具:使用kgEncode转换压缩无损音乐
在kugou安装目录下,有kgEncode目录,可以在各种格式中相互转换
- spring源码解析之前置知识点
本文是作者原创,版权归作者所有.若要转载,请注明出处. 最近在看spring源码,但是spring的体系太庞大了,在这里记录一下阅读源码中遇到知识点 @PostConstruct 被注解的方法,在对象 ...
- GitHub 热点速览 Vol.20:VSCode 插件全家桶新增画图小能手
作者:HelloGitHub-小鱼干 摘要:后浪,这个五月热词用来概括 GitHub 本周热点无疑是最佳词汇.Deno 这个 Node.js 作者制造出来的后浪,掀起了 GitHub Trending ...
- Docker之save、load、export、import命令
Docker的镜像和容器可以有两种方式导出 1.Docker save #ID or #Name 2.Docker save #ID or #Name docker save和docker expor ...
- Python 常用编码规范
一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...
- 树状数组区间更新区间查询以及gcd的logn性质
题目描述 给你一个长为n的序列a m次查询 每次查询一个区间的所有子区间的gcd的和mod1e9+7的结果 输入描述: 第一行两个数n,m之后一行n个数表示a之后m行每行两个数l,r表示查询的区间 输 ...