算法提高 判断名次

时间限制: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. Day_13【IO流】扩展案例2_统计键盘录入字符在指定项目文件中出现的次数

    分析以下需求,并用代码实现 键盘录入一个字符(以字符串的形式录入) 判断当前字符在info3.txt当中是否存在 如果不存在, 给出提示 如果存在, 请统计出该字符出现的次数 Info3.txt内容如 ...

  2. 如何应对Kubernetes的安全挑战?

    导读:Kubernetes的广泛使用证明了企业的信念,即他们不仅具有处理现代应用程序开发和现代化计划的复杂性的能力,而且具有大规模处理能力. 根据CNCF对各种规模的公司中1340位技术专家的最新调查 ...

  3. mysql 中 innoDB 与 MySAM

    mysql 中 innoDB 与 MyISAM 的特点 --ENGINE = innodb 1.提供事务处理,支持行锁: 2.不加锁读取,增加并发读的用户数量和空间: 3. insert/update ...

  4. PHP带标签的字符串去除标签,计算字符串长度的两种格式,截取字符串

    $str = "<p>看地方撒地方<i>fdsafsdfsd</i><img src="/static/img/fdsf.jpg" ...

  5. Win10最常用的快捷键,效率Max提高100%(常用的应该是最全的)

    写在最前面 这是博主爆肝了一晚上给写出来,因为很多博客和资料中仍然使用的xp win7 和win8 的快捷键,我不断地的实验和尝试,总结出以下的快捷键,希望可以帮助到你. 最后,未经运营,爆肝博文不得 ...

  6. 解决 es CircuitBreakingException 问题

    比如频繁报如下错误, [2019-06-16T15:31:22,778][DEBUG][o.e.a.a.c.n.i.TransportNodesInfoAction] [node-xxx] faile ...

  7. live2d web端加载moc3模型

    大佬博客链接:https://blog.csdn.net/weixin_44128558/article/details/104792345 照着大佬的博客做一下,可以先学会怎么生成bundle.js ...

  8. Notification API,为你的网页添加桌面通知推送

    Notification 是什么 MDN: Notifications API 的 Notification 接口用于配置和向用户显示桌面通知.这些通知的外观和特定功能因平台而异,但通常它们提供了一种 ...

  9. mysql小白系列_04 datablock

    1.为什么创建一个InnoDB表只分配了96K而不是1M? 2.解析第2行记录格式?(用下面的表定义和数据做测试) mysql> create table gyj_t3 (),name2 var ...

  10. Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...