目录

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 解决方案

具体代码如下:

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Scanner;
  4.  
  5. public class Main {
  6. public static String[] say = new String[5];
  7. public static ArrayList<String> temp = new ArrayList<String>();
  8. public static ArrayList<String> result = new ArrayList<String>();
  9.  
  10. public void swap(char[] A, int i, int j) {
  11. char s = A[i];
  12. A[i] = A[j];
  13. A[j] = s;
  14. }
  15.  
  16. public void dfs(char[] A, int step) {
  17. if(step == A.length) {
  18. StringBuilder s = new StringBuilder("");
  19. for(int i = 0;i < A.length;i++)
  20. s.append(A[i]);
  21. temp.add(s.toString());
  22. } else {
  23. for(int i = step;i < A.length;i++) {
  24. swap(A, i, step);
  25. dfs(A, step + 1);
  26. swap(A, i, step);
  27. }
  28. }
  29. }
  30.  
  31. public boolean judge(int a, String o, int p, int b) {
  32. if(b == 1) { //此次说话为真
  33. if(o.equals(">")) {
  34. if(a > p)
  35. return true;
  36. else
  37. return false;
  38. } else if(o.equals(">=")) {
  39. if(a >= p)
  40. return true;
  41. else
  42. return false;
  43. } else if(o.equals("=")) {
  44. if(a == p)
  45. return true;
  46. else
  47. return false;
  48. } else if(o.equals("!=")) {
  49. if(a != p)
  50. return true;
  51. else
  52. return false;
  53. } else if(o.equals("<")) {
  54. if(a < p)
  55. return true;
  56. else
  57. return false;
  58. } else if(o.equals("<=")) {
  59. if(a <= p)
  60. return true;
  61. else
  62. return false;
  63. }
  64. } else if(b == 0) { //此次说话为假
  65. if(o.equals(">")) {
  66. if(a <= p)
  67. return true;
  68. else
  69. return false;
  70. } else if(o.equals(">=")) {
  71. if(a < p)
  72. return true;
  73. else
  74. return false;
  75. } else if(o.equals("=")) {
  76. if(a != p)
  77. return true;
  78. else
  79. return false;
  80. } else if(o.equals("!=")) {
  81. if(a == p)
  82. return true;
  83. else
  84. return false;
  85. } else if(o.equals("<")) {
  86. if(a >= p)
  87. return true;
  88. else
  89. return false;
  90. } else if(o.equals("<=")) {
  91. if(a > p)
  92. return true;
  93. else
  94. return false;
  95. }
  96. }
  97. return false;
  98. }
  99.  
  100. public void getResult(int i, int j) {
  101. for(int t = 0;t < temp.size();t++) {
  102. String s = temp.get(t);
  103. boolean judge1 = true;
  104. for(int m = 0;m < 5;m++) {
  105. char a = say[m].charAt(0);
  106. String o = "";
  107. int p = say[m].charAt(say[m].length() - 1) - '0';
  108. if(say[m].length() == 3) {
  109. o = o + say[m].substring(1, 2);
  110. } else {
  111. o = o + say[m].substring(1, 3);
  112. }
  113. if(i == m || j == m) {
  114. judge1 = judge(s.indexOf(a) + 1, o, p, 1);
  115. } else {
  116. judge1 = judge(s.indexOf(a) + 1, o, p, 0);
  117. }
  118. if(judge1 == false)
  119. break;
  120. }
  121. if(judge1 == false)
  122. continue;
  123. int a1 = s.indexOf(('A'+i));
  124. int a2 = s.indexOf(('A'+j));
  125. if((a1 == 1 && a2 == 3) || (a1 == 3 && a2 == 1)) {
  126. judge1 = true;
  127. } else {
  128. judge1 = false;
  129. }
  130.  
  131. if(judge1 == true) {
  132. if(!result.contains(s))
  133. result.add(s);
  134. }
  135. }
  136. }
  137.  
  138. public static void main(String[] args) {
  139. Main test = new Main();
  140. String A = "ABCDE";
  141. char[] B = A.toCharArray();
  142. test.dfs(B, 0);
  143. Scanner in = new Scanner(System.in);
  144. for(int i = 0;i < 5;i++)
  145. say[i] = in.next();
  146. for(int i = 0;i < 5;i++) {
  147. for(int j = i + 1;j < 5;j++)
  148. test.getResult(i, j);
  149. }
  150. Collections.sort(result);
  151. for(int i = 0;i < result.size();i++)
  152. System.out.println(result.get(i));
  153. System.out.println(result.size());
  154. }
  155. }

算法笔记_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. 【费用流】BZOJ1927-[Sdoi2010]星际竞速

    [题目大意] 有一些点,它们之间存在一些有向边(由编号小的到编号大的),从一点到另一点消耗时间为边长.也可以消耗Ti时间直接抵达任意一个点.问所有点都走一遍最少需要多少时间? [思路] ①将每个点i拆 ...

  2. redisson实现基于业务的互斥锁

    虽然数据库有锁的实现,但是有时候对于数据的操作更需要业务层控制. 这个解决的问题有次面试被问到过,当时不知道怎么解决,乱说一通,今天也算是有个解决方案了 项目中有个需求,就是订单需要经过一层一层的审核 ...

  3. Python 温度转换实例分析

    #TempConvert.py Tempstr=input('请输入要转换的温度值:') if Tempstr[-1] in ['C','c']: F=1.8*eval(Tempstr[0:-1])+ ...

  4. windows2008服务器连接Oracle慢的问题。

    昨天发布程序到2008服务器的IIS,从Sql Server数据库取数没问题,但是从Oracle数据库取数,非常的慢,同样的程序在2003服务器上没问题,本机也没问题.一开始怀疑是这台机器有问题,后来 ...

  5. char *p 与char p[]

    char *p=a和char*p=&a 前者p是一个指针变量后者p是一个char型变量 char *p = "123"; 为全局数组,放在常量区,而非普通数据段(静态存储区 ...

  6. Ubuntu14.04环境下配置TFTP服务器

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  7. 如果内容很长ueditor编辑辑器怎么出现滚动条

    在开发网站的时候,有的页面需要加载ueditor编辑器,如果内容很长,默认设置的时候编辑器会根据内容拉长,而不是页面出现滚动条,如果拖动页面滚条,会比较麻烦,要拖动很长才能看到提交按钮. 如何才能让编 ...

  8. Android Studio Beat版公布!

    Android Studio Beat版公布了! 速度比0.61快爆了,有木有! L也能更新了,炫爆了,有木有!

  9. linux 清空catalina.out日志 不需要重启tomcat

    # cd /usr/local/tomcat8.0/logs/ # echo "" > catalina.out

  10. PHP:IIS下的PHP开发环境搭建

    背景 发现书柜中有好几本PHP的图书,决定还是学学PHP,本文介绍一下在Windows环境下PHP开发环境的搭建. 运行环境搭建 下载和安装下面三个软件: IIS. http://php.iis.ne ...