目录

1 问题描述

2 解决方案

 


1 问题描述

问题描述
  某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话。(经典的开头……-_-!)得了第1名的人23,说了假话;得了第5名的人不好意思,也说了假话;为了使求解问题简单,第3名同样说了假话。(奇数名次说假话)
输入格式
  共5行,各行依次表示A~E说的话。
  每行包含一个形如“A>=3”的名次判断,即一个大写字母+关系运算符+一个数字,不包含空格。
  大写字母A~E,关系运算<、<=、=、>=、>、!=,数字1~5。注意:等于是“=”不是“==”!
输出格式
  可能有多解,请按照字典序输出排名序列,每个解一行
  最后一行输出解的数量
样例输入
A=2
D=5
E>3
A>2
B!=1
样例输出
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
 

2 解决方案

具体代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner; public class Main {
public static String[] say = new String[5];
public static ArrayList<String> temp = new ArrayList<String>();
public static ArrayList<String> result = new ArrayList<String>(); public void swap(char[] A, int i, int j) {
char s = A[i];
A[i] = A[j];
A[j] = s;
} public void dfs(char[] A, int step) {
if(step == A.length) {
StringBuilder s = new StringBuilder("");
for(int i = 0;i < A.length;i++)
s.append(A[i]);
temp.add(s.toString());
} else {
for(int i = step;i < A.length;i++) {
swap(A, i, step);
dfs(A, step + 1);
swap(A, i, step);
}
}
} public boolean judge(int a, String o, int p, int b) {
if(b == 1) { //此次说话为真
if(o.equals(">")) {
if(a > p)
return true;
else
return false;
} else if(o.equals(">=")) {
if(a >= p)
return true;
else
return false;
} else if(o.equals("=")) {
if(a == p)
return true;
else
return false;
} else if(o.equals("!=")) {
if(a != p)
return true;
else
return false;
} else if(o.equals("<")) {
if(a < p)
return true;
else
return false;
} else if(o.equals("<=")) {
if(a <= p)
return true;
else
return false;
}
} else if(b == 0) { //此次说话为假
if(o.equals(">")) {
if(a <= p)
return true;
else
return false;
} else if(o.equals(">=")) {
if(a < p)
return true;
else
return false;
} else if(o.equals("=")) {
if(a != p)
return true;
else
return false;
} else if(o.equals("!=")) {
if(a == p)
return true;
else
return false;
} else if(o.equals("<")) {
if(a >= p)
return true;
else
return false;
} else if(o.equals("<=")) {
if(a > p)
return true;
else
return false;
}
}
return false;
} public void getResult(int i, int j) {
for(int t = 0;t < temp.size();t++) {
String s = temp.get(t);
boolean judge1 = true;
for(int m = 0;m < 5;m++) {
char a = say[m].charAt(0);
String o = "";
int p = say[m].charAt(say[m].length() - 1) - '0';
if(say[m].length() == 3) {
o = o + say[m].substring(1, 2);
} else {
o = o + say[m].substring(1, 3);
}
if(i == m || j == m) {
judge1 = judge(s.indexOf(a) + 1, o, p, 1);
} else {
judge1 = judge(s.indexOf(a) + 1, o, p, 0);
}
if(judge1 == false)
break;
}
if(judge1 == false)
continue;
int a1 = s.indexOf(('A'+i));
int a2 = s.indexOf(('A'+j));
if((a1 == 1 && a2 == 3) || (a1 == 3 && a2 == 1)) {
judge1 = true;
} else {
judge1 = false;
} if(judge1 == true) {
if(!result.contains(s))
result.add(s);
}
}
} public static void main(String[] args) {
Main test = new Main();
String A = "ABCDE";
char[] B = A.toCharArray();
test.dfs(B, 0);
Scanner in = new Scanner(System.in);
for(int i = 0;i < 5;i++)
say[i] = in.next();
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++)
System.out.println(result.get(i));
System.out.println(result.size());
}
}

算法笔记_153:算法提高 判断名次(Java)的更多相关文章

  1. 算法笔记_030:回文判断(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 给定一个字符串,如何判断这个字符串是否是回文串? 所谓回文串,是指正读和反读都一样的字符串,如madam.我爱我等. 2 解决方案 解决上述问题,有 ...

  2. 算法笔记_147:有向图欧拉回路判断应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...

  3. Java实现 蓝桥杯 算法提高 判断名次

    算法提高 判断名次 时间限制:1.0s 内存限制:256.0MB 问题描述 某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话.(经典的开头---_-!)得了第1名的人23 ...

  4. 算法笔记_165:算法提高 道路和航路(Java)

    目录 1 问题描述 2解决方案   1 问题描述 问题描述 农夫约翰正在针对一个新区域的牛奶配送合同进行研究.他打算分发牛奶到T个城镇(标号为1..T),这些城镇通过R条标号为(1..R)的道路和P条 ...

  5. 算法笔记_155:算法提高 概率计算(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...

  6. 算法笔记_166:算法提高 金属采集(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了.一些节点之间有道路相连,所有的节点和道路形成了一棵树.一共 ...

  7. 算法笔记_163:算法提高 最大乘积(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2行: 第1行给出总共的数 ...

  8. 算法笔记_167:算法提高 矩阵翻转(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 Ciel有一个N*N的矩阵,每个格子里都有一个整数. N是一个奇数,设X = (N+1)/2.Ciel每次都可以做这样的一次操作:他从矩阵 ...

  9. 算法笔记_164:算法提高 最小方差生成树(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V, ...

随机推荐

  1. FFTW3学习笔记1:VS2015下配置FFTW3(快速傅里叶变换)库

    一.FFTW简介 FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. ...

  2. 【DP】BZOJ1564- [NOI2009]二叉查找树(!!)

    [题目大意] 已知一个treap上每个节点的键值.权值和访问频率.现在可以修改一些节点的权值(可以修改为实数),需要付出k(k为定制)的额外代价.一个treap的总代价=∑(每个节点的访问频率*深度) ...

  3. 在活动之间切换(显式Intent)

    实验名称:在活动之间切换 实验现象:通过点击主活动的按钮进入下一个界面 使用技术:显式Intent 步骤: 1.创建一个项目,加载布局.添加一个button 2.新建一个活动. 3.修改按钮的点击事件 ...

  4. Android消息机制——Handler

      /**android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个MessageQueue(消息队列), * 但是MessageQueue被封装到Looper里 ...

  5. 洛谷P1341 最受欢迎的奶牛

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  6. PHP生成短网地址

    思路: 1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3 ...

  7. [转]Jquery实现页面定时跳转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. web前端开发必备压缩工具整理

    影响网站打开时间有两个因素,一个是网页加载速度,另一个是网站页面的大小.网站加载速度与用户所处的网络环境及主机性能有关,而网站页面的大小则由网站开发者决定,最主要的就是web前端开发工程师的工作.本文 ...

  9. HTML5开发的翻页效果实例

    简介2010年F-i.com和Google Chrome团队合力致力于主题为<20 Things I Learned about Browsers and the Web>(www.20t ...

  10. JAVA多线程读写文件范例

    在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...