Java实现 蓝桥杯 算法提高 判断名次
算法提高 判断名次
时间限制: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实现 蓝桥杯 算法提高 判断名次的更多相关文章
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
- Java实现 蓝桥杯 算法提高 小X的购物计划
试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...
- Java实现蓝桥杯算法提高P0102
算法提高 P0102 时间限制:1.0s 内存限制:256.0MB 提交此题 用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进 ...
- Java实现 蓝桥杯 算法提高 学霸的迷宫
算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...
- Java实现 蓝桥杯 算法提高 周期字串
算法提高 周期字串 时间限制:1.0s 内存限制:256.0MB 问题描述 右右喜欢听故事,但是右右的妈妈总是讲一些"从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有 ...
- Java实现 蓝桥杯 算法提高 最大乘积
算法提高 最大乘积 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2 ...
- Java实现 蓝桥杯 算法提高 三进制数位和
算法提高 三进制数位和 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 给定L和R,你需要对于每一个6位三进制数(允许前导零),计算其每一个数位上的数字和,设其在十进制下为S. 一个 ...
- Java实现 蓝桥杯 算法提高 矩阵相乘
算法提高 矩阵相乘 时间限制:1.0s 内存限制:256.0MB 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也 ...
- Java实现 蓝桥杯 算法提高 因式分解
算法提高 8-1因式分解 时间限制:10.0s 内存限制:256.0MB 提交此题 问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出23.输入20,输出22*5. 样例 与 ...
随机推荐
- 计算机网络——简单说说WebSocket协议
一.前言 之前做了一个Web小项目,需要实现后端持续给前端推送消息的功能,当时最开始使用的是轮询实现,但是效率太低,对资源消耗也大.之后为了解决这个问题,上网查阅资料后,改用了WebSocket实 ...
- Apache Poi实现excel解析
一.说明 1.本文通过使用 poi 工具解析 excel 表格数据,实现导入导出 2.excel目前有两种格式 2003版本的 excel.xls 与 2007版本的 excel.xlsx ,注意两种 ...
- Mysql 常用函数(20)- ceiling 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html ceiling 的作用 向上取整,ceil 函数一 ...
- [linux] VNC the connection was refused by the computer
在用VNC 连接host的时候发现“”“the connection was refused by the computer ” 方法:发现登录这个host,敲打:verser 的时候出现了这个: 它 ...
- AFNetworking 3.0 使用详解 和 源码解析实现原理
AFN原理&& AFN如何使用RunLoop来实现的: 让你介绍一下AFN源码的理解,首先要说说封装里面主要做了那些重要的事情,有那些重要的类(XY题) 一.AFN的实现步骤: NSS ...
- wpf winform 截图
wpf 通过下面的截图,标题可能会丢失. public void CreateBitmapFromVisual(Window win, string fileName) { ...
- Linux系统如何安装qt-desinger
前言:最近想在python3.7.3下玩下PyQt5,写UI有两种方式一种是使用手写,第二个就是使用Qt Designer工具来写,所以首先就是安装PyQt5和pyqt5-tools工具了. 一.安装 ...
- 二、YARN
一.YARN 介绍 yarn 是下一代 MapReduce,即 MRv2,是在第一代 MapReduce 基础上演变而来的,主要是为了解决原始 Hadoop 扩展性较差,不支持多计算框架而提出的,通俗 ...
- Enjoy the pain about Moloch
这echo出来的啥子嘛?意思是小姐姐有自虐倾向?可若是moloch有汉化包或翻译文件,小姐姐至于这么“享受”install的过程吗? 过程都走过了,那就记录一下吧:1.找个Ubuntu镜像,阿里云镜像 ...
- Django之forms.Form
django中的form组件提供了普通表单提交及验证数据的主要功能: 1. 生成页面可用的HTML标签 2. 对用户提交的数据进行验证 3. 可保留用户上次提交的数据 django中 ...