算法提高 判断名次

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

问题描述

  某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话。(经典的开头……-_-!)得了第1名的人23,说了假话;得了第5名的人不好意思,也说了假话;为了使求解问题简单,第3名同样说了假话。(奇数名次说假话)

输入格式

  共5行,各行依次表示A~E说的话。

  每行包含一个形如“A>=3”的名次判断,即一个大写字母+关系运算符+一个数字,不包含空格。

  大写字母AE,关系运算<、<=、=、>=、>、!=,数字15。注意:等于是“=”不是“==”!

输出格式

  可能有多解,请按照字典序输出排名序列,每个解一行

  最后一行输出解的数量

样例输入

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; public class 判断名次 {
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;
} }

Java实现 蓝桥杯 算法提高 判断名次的更多相关文章

  1. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  2. Java实现 蓝桥杯 算法提高 小X的购物计划

    试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...

  3. Java实现蓝桥杯算法提高P0102

    算法提高 P0102 时间限制:1.0s 内存限制:256.0MB 提交此题 用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进 ...

  4. Java实现 蓝桥杯 算法提高 学霸的迷宫

    算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...

  5. Java实现 蓝桥杯 算法提高 周期字串

    算法提高 周期字串 时间限制:1.0s 内存限制:256.0MB 问题描述 右右喜欢听故事,但是右右的妈妈总是讲一些"从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有 ...

  6. Java实现 蓝桥杯 算法提高 最大乘积

    算法提高 最大乘积 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2 ...

  7. Java实现 蓝桥杯 算法提高 三进制数位和

    算法提高 三进制数位和 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 给定L和R,你需要对于每一个6位三进制数(允许前导零),计算其每一个数位上的数字和,设其在十进制下为S. 一个 ...

  8. Java实现 蓝桥杯 算法提高 矩阵相乘

    算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也 ...

  9. Java实现 蓝桥杯 算法提高 因式分解

    算法提高 8-1因式分解 时间限制:10.0s 内存限制:256.0MB 提交此题 问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出23.输入20,输出22*5. 样例 与 ...

随机推荐

  1. 你应该知道的Python3.6、3.7、3.8新特性

    很多人在学习了基本的Python语言知识后,就转入应用阶段了,后期很少对语言本身的新变化.新内容进行跟踪学习和知识更新,甚至连已经发布了好几年的Python3.6的新特性都缺乏了解. 本文列举了Pyt ...

  2. Queue-PriorityQueue源码解析

    Queue队列通常是先进先出(FIFO),但也有特殊的非FIFO,如本文也分析的PriorityQueue. Queue接口 Queue接口定义的方法: 添加元素接口: add(E e) -> ...

  3. [csu/coj 1080]划分树求区间前k大数和

    题意:从某个区间内最多选择k个数,使得和最大 思路:首先题目给定的数有负数,如果区间前k大出现负数,那么负数不选和更大,于是对于所有最优选择,负数不会出现,所以用0取代负数,问题便转化为区间的前k大数 ...

  4. HDU 2005 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2005题目大意:给定年份,计算是第几天 解题思路: 很水,判定下是否为闰年,方法:四年一闰,百年不闰,四 ...

  5. 【5min+】美化API,包装AspNetCore的返回结果

    系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...

  6. WIn7系统下配置Java环境变量

    给个官网下载地址  :https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.首先 ...

  7. js 延迟加载的几种方法

    1. defer 属性HTML 4.01 为 <script>标签定义了 defer属性. 用途:表明脚本在执行时不会影响页面的构造.也就是说,脚本会被延迟到整个页面都解析完毕之后再执行. ...

  8. css中文字两端对齐兼容IE

    text-align: justify; text-justify:inter-ideograph;

  9. 快速配置Samba服务

    1.安装samba 这里以CenOS 7为例,其他系统类似 yum install samba samba-client samba-common   2.修改smb.conf 最好先备份原文件,以防 ...

  10. hdu6092 01背包

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...