试题 算法训练 谁干的好事?

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

  ABCDE中num个人做了好事,truth个人说真话。

  A说:“我和X中有且只有一个做了好事”

  B说:“C和E中有人做了好事”

  C说:“我和D和A中有人做了好事”

  D说:“B和C都没有做好事”

  E说:“我没有做好事”

  请问有哪些人做了好事?

多组方案请一行一个输出。

输入格式

  仅一行,先是一个整数num,接着是一个A~E的字符X,最后是一个整数truth。意义见题面。

输出格式

  每行输出一组方案,方案中按 字母序 输出做好事的人的代号(A~E),不要空格隔开。

如果没有合法方案,输出一行一个0即可。

样例输入

1 E 2

样例输出

0

样例输入

2 E 2

样例输出

BD

BE

数据规模和约定

  规定,1 <= num <= 2。

  

PS:

其实就是先把我的做好事的循环,然后循环我说真话的,然后在判断是不是相等

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set; public class 谁干得好事 {
static int[] goodMan = new int[5];
static int[] truths = new int[5];
static Set<String> list = new HashSet<>(); public static void main(String[] args) {
char[] inputs = new Scanner(System.in).nextLine().toCharArray(); int num = inputs[0] - '0', truth = inputs[4] - '0';
char x = inputs[2]; searchOne(0, num, truth, x); outputResult();
} private static void outputResult() {
if (list.size() == 0) {
System.out.println(0);
return;
}
for (String s : list) {
System.out.println(s);
}
} private static void searchOne(int k, int num, int truth, char x) {
if (k == num) {
searchTwo(0, truth, x);
return;
} for (int i = 0; i < 5; i++) {
if (goodMan[i] == 0) {
goodMan[i] = 1;
searchOne(k + 1, num, truth, x);
goodMan[i] = 0;
}
}
} private static void searchTwo(int k, int truth, char x) {
if (k == truth) {
if (judge(x)) {
addResult();
}
return;
} for (int i = 0; i < 5; i++) {
if (truths[i] == 0) {
truths[i] = 1;
searchTwo(k + 1, truth, x);
truths[i] = 0;
}
}
} private static void addResult() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 5; i++) {
if (goodMan[i] == 1) {
stringBuilder.append((char) ('A' + i));
}
}
list.add(stringBuilder.toString());
} private static boolean judge(char x) {
boolean A = (goodMan[0] ^ goodMan[x - 'A']) == truths[0];
boolean B = ((goodMan[2] + goodMan[4]) >= 1) == (truths[1] == 1);
boolean C = ((goodMan[0] + goodMan[2] + goodMan[3]) >= 1) == (truths[2] == 1);
boolean D = ((goodMan[1] + goodMan[2]) == 0) == (truths[3] == 1);
boolean E = (goodMan[4] ^ truths[4]) == 1; return A && B && C && D && E;
} }

Java实现 蓝桥杯 算法训练 谁干的好事?的更多相关文章

  1. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

  2. Java实现蓝桥杯 算法训练 大等于n的最小完全平方数

    试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...

  3. java实现 蓝桥杯 算法训练 Password Suspects

    问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...

  4. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  5. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  6. Java实现 蓝桥杯 算法训练 审美课

    算法训练 审美课 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师 ...

  7. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  8. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

  9. Java实现 蓝桥杯 算法训练 第五次作业:字符串排序

    试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...

随机推荐

  1. Jekyll 解决Jekyll server本地预览文章not found的问题

    layout: post tags: [Jekyll] comments: true 执行Jekyll本地浏览器预览指令 bundle exec jekyll serve 进入浏览器输入127.0.0 ...

  2. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

  3. Hexo 博客利用 Nginx 实现中英文切换

    本文记录了对 Hexo 博客进行中英文切换的配置过程,实现同一应用共用模版,任何页面可以切换到另一语言的对应页面,并对未明确语言的访问地址,根据浏览器语言进行自动跳转 实现细则 中英文地址区分 博客中 ...

  4. uCOS2014.1.8

    目前uCOS中已经接触到的全局变量: OSTCBCur OSIntNesting OSPrioHighRdy    最高优先级任务 任哲编著<嵌入式实时操作系统uC/OS-II原理及应用> ...

  5. ql的python学习之路-day15

    前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...

  6. Hyperledger Fabric——balance transfer(三)创建和加入Channel

    详细解析blance transfer示例的创建通道(Channel)和加入节点到通道的过程. 创建Channel 1.首先看app.js的路由函数 var createChannel = requi ...

  7. poj3694 连通无向图图加边后有多少桥

    Network Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10261   Accepted: 3807 Descript ...

  8. SPOJ-PGCD Primes in GCD Table

    题目链接:https://vjudge.net/problem/SPOJ-PGCD 题目大意: 给定 \(N\) 和 \(M\),求满足 \((1 \le x \le N), (1 \le y \le ...

  9. java链接redis

    创建maven项目 2.导入jar包 <dependencies> <dependency> <groupId>redis.clients</groupId& ...

  10. 深入理解JS:执行上下文中的this(二)

    目录 序言 Function.prototype.bind() 方法 箭头函数 参考 1.序言 在 深入理解JS:执行上下文中的this(一) 中,我们主要深入分析全局环境和函数环境中函数调用的 th ...