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.等到第一根燃尽以后,再点燃 ...
随机推荐
- 使用IDEA远程向伪分布式搭建的Hadoop提交MapReduce作业
环境 VirtualBox 6.1 IntelliJ IDEA 2020.1.1 Ubuntu-18.04.4-live-server-amd64 jdk-8u251-linux-x64 hadoop ...
- 攻防世界-web-高手进阶区018-easytornado
1.查看主页面 2.查看其他页面,/welcome.txt http://111.198.29.45:39004/file?filename=/welcome.txt&filehash=9ae ...
- spark机器学习从0到1基本的统计工具之(三)
给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型 ...
- java触发器的学习
public class OpenVirtualService { public void open(){ //虚机开通 //业务逻辑 ...
- 微信小程序跑步计时器
firstStep:run.wxml <view class="head" style="flex-direction:row;"> <ima ...
- JetBrains PyCharm 2018.2.4 x64 工具里如何安装bs4
第一步:点击File->Settings 第二步:选择Project:workplace-->Project Interpreter,然后再点击右上角的"+"按钮进入下 ...
- flask之CORS跨域请求处理
from flask import Flask from flask_cors import CORS#pip install Flask-CORS#跨域请求模块 app = Flask(__name ...
- 博客营销(Blog Marketing)
一.什么是博客营销 博客营销(Blog Marketing)的概念可以说并没有严格的定义,简单来说,就是利用博客这种网络应用形式开展网络营销.要说明什么是博客营销,首先要从什么是博客说起. 博客(Bl ...
- Flask开发技巧之异常处理
Flask开发技巧之异常处理 目录 Flask开发技巧之异常处理 1.Flask内置异常处理 2.HTTPException类分析 3.自定义异常处理类 4.方便的定义自己的错误类 5.注意事项 本人 ...
- 点双连通分量F. Simple Cycles Edges
F. Simple Cycles Edges time limit per test 2 seconds memory limit per test 256 megabytes input stand ...