算法笔记_152:算法提高 扶老奶奶过街(Java)
目录
1 问题描述
一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
若有多个答案,在一行中输出,编号之间用空格隔开。
例如
A B C D E(这显然不是正确答案)
2 解决方案
具体代码如下:
import java.util.ArrayList;
import java.util.Collections; public class Main {
public static ArrayList<Integer> result = new ArrayList<Integer>(); public void getResult(int i, int j) {
//ans[i] = 0表示初始状态,ans[i] = -1表示一定没有扶
//ans[i] = 1表示一定有扶,ans[i] = 2表示有可能扶
int[] ans = new int[5]; //A说
if(i == 0 || j == 0) {
ans[0] = -1;
ans[4] = -1;
} else {
ans[0] = 2;
ans[4] = 2;
}
//B说
if(i == 1 || j == 1) {
ans[2] = 2;
if(ans[4] == 2) {
ans[4] = 1;
} else if(ans[4] == -1)
ans[2] = 1;
} else {
ans[2] = -1;
if(ans[4] == 2) {
ans[4] = -1;
ans[0] = 1;
}
}
//C说
if(i == 2 || j == 2) {
ans[3] = 2;
if(ans[2] == 2)
ans[2] = 1;
else if(ans[2] == -1)
ans[3] = 1;
} else {
if(ans[2] == 1)
return;
else
ans[2] = -1;
ans[3] = -1;
}
//D说
if(i == 3 || j == 3) {
ans[1] = -1;
if(ans[2] == 1)
return;
else if(i == 2 || j == 2) {
ans[2] = -1;
ans[3] = 1;
} else if(i == 1 || j == 1) {
ans[2] = -1;
ans[4] = 1;
}
} else {
ans[1] = 2;
if(ans[2] == 2)
ans[2] = 1;
else if(ans[2] == -1)
ans[1] = 1;
}
//E说
if(i == 4 || j == 4) {
if(ans[4] == 1)
return;
else
ans[4] = -1;
} else {
if(ans[4] == -1)
return;
else
ans[4] = 1;
}
int count = 0, temp = 0;
for(int t = 0;t < 5;t++) {
if(ans[t] == 1) {
count++;
temp = t;
}
}
if(count == 1) {
if(!result.contains(temp))
result.add(temp);
}
return;
} public static void main(String[] args) {
Main test = new Main();
for(int i = 0;i < 5;i++) {
for(int j = i + 1;j < 5;j++) {
test.getResult(i, j);
}
}
Collections.sort(result);
for(int i = 0;i < result.size();i++) {
char temp = (char) ('A' + result.get(i));
System.out.print(temp+" ");
}
}
}
算法笔记_152:算法提高 扶老奶奶过街(Java)的更多相关文章
- Java实现 蓝桥杯 算法提高 扶老奶奶过街
1 问题描述 一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶 ...
- C语言 · 扶老奶奶过街
算法提高 扶老奶奶过街 时间限制:1.0s 内存限制:256.0MB 一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我 ...
- 算法笔记_165:算法提高 道路和航路(Java)
目录 1 问题描述 2解决方案 1 问题描述 问题描述 农夫约翰正在针对一个新区域的牛奶配送合同进行研究.他打算分发牛奶到T个城镇(标号为1..T),这些城镇通过R条标号为(1..R)的道路和P条 ...
- 算法笔记_083:蓝桥杯练习 合并石子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子 ...
- 算法笔记_075:蓝桥杯练习 最短路(Java)
目录 1 问题描述 2 解决方案 2.1 floyd算法解决 2.2 spfa算法解决 1 问题描述 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从 ...
- 算法笔记_155:算法提高 概率计算(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...
- 算法笔记_166:算法提高 金属采集(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了.一些节点之间有道路相连,所有的节点和道路形成了一棵树.一共 ...
- 算法笔记_163:算法提高 最大乘积(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2行: 第1行给出总共的数 ...
- 算法笔记_167:算法提高 矩阵翻转(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 Ciel有一个N*N的矩阵,每个格子里都有一个整数. N是一个奇数,设X = (N+1)/2.Ciel每次都可以做这样的一次操作:他从矩阵 ...
随机推荐
- Android签名有什么作用?
应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名.这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序.如果你采用了不同的证书,那么系统会要求你的应用程序采用不同 ...
- bzoj 1098
对于关系,看其是否是“等价关系”,即满足:自反,传递,对称. 如果是可以用并查集来连接等价类. 这道题是求原图补集的联通快个数,考虑原图度最少的点(由鸽巢原理,最多为2*e/n个). 先将未与其连边的 ...
- JavaScript中typeof详解
[范围]typeof返回值范围: typeof返回值对应 类型 结果 String "string" Number "number" Boolean " ...
- glob函数的使用
glob库函数用于Linux文件系统中路径名称的模式匹配,即查找文件系统中指定模式的路径.注意,这不是正则表达式匹配,虽然有些相似,但还是有点差别. glob函数原型 #include & ...
- C# 如何做类似微博和QQ的授权登录
记录下吧,dotnet下有这个http://dotnetopenauth.net/开源的框架可以用来实现服务端和客户端的实现,具体的使用方法还真研究,第一次接触OAuth这个概念
- 高级需求分析UML建模设计模式笔记
1.REQ->HLR 分析 全系统性质->AD设计 Context,BOM,Conception 2.REQ->LLR 分析 模块分析->DD设计 + 编码 Feature,B ...
- 代码规范审查 - Sonar集成Visual Studio
开发人员可以使用Sonar的集成插件在开发阶段进行实时代码质量审核,在代码编写阶段分析出当前代码的质量及规范漏洞,并给出合理的修改建议.编写高质量.高维护性的代码变得更简单! VS集成Sonar之前 ...
- 6)Linux程序设计入门--消息管理
)Linux程序设计入门--消息管理 前言:Linux下的进程通信(IPC) Linux下的进程通信(IPC) POSIX无名信号量 System V信号量 System V消息队列 System V ...
- RESTful概念理解
基础 REST 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态. 如果考虑使用它的 Web 服务的数 ...
- Delphi DBGrid图显用法
procedure TForm10.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: ...