蓝桥杯_算法提高_判断名次
2016-03-19 20:12
351 查看
问题描述
某场比赛过后,你想要知道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
某场比赛过后,你想要知道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
import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; /** * @author 翔 * */ public class Main { private static String[] strArr=new String[5]; private static ArrayList<String> list=new ArrayList<String>(); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); for(int i=0;i<5;i++){ strArr[i]=sc.next(); } allSort(0,5,new char[]{'A','B','C','D','E'}); Collections.sort(list); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } System.out.println(list.size()); } private static void allSort(int start,int end,char[] arr){ if(start==end){ String s=new String(arr); if(judge(s)){ list.add(s); } }else{ for(int i=start;i<end;i++){ char temp=arr[start]; arr[start]=arr[i]; arr[i]=temp; allSort(start+1,end,arr); temp=arr[start]; arr[start]=arr[i]; arr[i]=temp; } } } private static boolean judge(String s){ char num1=s.charAt(0); char num3=s.charAt(2); char num5=s.charAt(4); String[] temp=new String[5]; for(int i=0;i<5;i++){ temp[i]=strArr[i].substring(0); } reverse(num1,temp); reverse(num3,temp); reverse(num5,temp); if(check(s,temp)){ return true; }else{ return false; } } private static boolean check(String s, String[] temp) { for(int i=0;i<5;i++){ String talk=temp[i]; if(talk.length()==3){ if(talk.charAt(1)=='<'){ int realNumIndex=s.indexOf(""+talk.charAt(0))+1;//num实际的名词 int assumeNumIndex=talk.charAt(talk.length()-1)-'0';//num推断出的名次范围 if(!(realNumIndex<assumeNumIndex)){ return false; } }else if(talk.charAt(1)=='='){ int realNumIndex=s.indexOf(""+talk.charAt(0))+1;//num实际的名词 int assumeNumIndex=talk.charAt(talk.length()-1)-'0';//num推断出的名次范围 if(!(realNumIndex==assumeNumIndex)){ return false; } }else{ int realNumIndex=s.indexOf(""+talk.charAt(0))+1;//num实际的名词 int assumeNumIndex=talk.charAt(talk.length()-1)-'0';//num推断出的名次范围 if(!(realNumIndex>assumeNumIndex)){ return false; } } }else{ if(talk.charAt(1)=='>'){ int realNumIndex=s.indexOf(""+talk.charAt(0))+1;//num实际的名词 int assumeNumIndex=talk.charAt(talk.length()-1)-'0';//num推断出的名次范围 if(!(realNumIndex>=assumeNumIndex)){ return false; } }else if(talk.charAt(1)=='!'){ int realNumIndex=s.indexOf(""+talk.charAt(0))+1;//num实际的名词 int assumeNumIndex=talk.charAt(talk.length()-1)-'0';//num推断出的名次范围 if(!(realNumIndex!=assumeNumIndex)){ return false; } }else{ int realNumIndex=s.indexOf(""+talk.charAt(0))+1;//num实际的名词 int assumeNumIndex=talk.charAt(talk.length()-1)-'0';//num推断出的名次范围 if(!(realNumIndex<=assumeNumIndex)){ return false; } } } } return true; } private static void reverse(char num,String[] temp){//num代表说假话的人 switch(num){ case 'A':temp[0]=change(temp[0]);break; case 'B':temp[1]=change(temp[1]);break; case 'C':temp[2]=change(temp[2]);break; case 'D':temp[3]=change(temp[3]);break; case 'E':temp[4]=change(temp[4]);break; } } //<、<=、=、>=、>、!= private static String change(String s){ if(s.length()==3){ if(s.charAt(1)=='<'){ s=s.replace("<",">="); }else if(s.charAt(1)=='='){ s=s.replace("=","!="); }else{ s=s.replace(">","<="); } }else{ if(s.charAt(1)=='>'){ s=s.replace(">=","<"); }else if(s.charAt(1)=='!'){ s=s.replace("!=","="); }else{ s=s.replace("<=",">"); } } return s; } }
相关文章推荐
- Jenkins进阶系列之——09配置Linux系统ssh免密码登陆
- php第三方登录 Oauth2.0协议
- Kubernetes是什么?
- Ubuntu14.04安装androidStudio错误解除
- 蓝桥杯 翻硬币
- Windows下安装sqlmap
- Ubuntu14.04安装androidStudio错误解除
- Ubuntu14.04安装androidStudio错误解除
- 单链表的逆转
- Jenkins进阶系列之——07更改Jenkins的主目录
- Jenkins进阶系列之——08Jenkins纳入版本控制
- SUSE各个系统版本安装saltstack方法
- 【杭电oj】2050 - 折线分割平面(递推)
- 最新最好用的百度云搜索引擎推荐
- 【js笔记】替换页面未加载默认图片
- Jenkins进阶系列之——05FTP publisher plugin插件
- 第四周项目3小学生算数系统
- 命令行调试Django的Template功能时碰到的问题及解决方案
- Delphi VMT的前世今生(研究一下D7的VMT表结构)
- 四则运算03 结对开发