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. 样例 与 ...
随机推荐
- 【Hadoop离线基础总结】Hive级联求和
Hive级联求和 建表 CREATE TABLE t_salary_detail( username string, month string, salary INT ) ROW format del ...
- PHP导出excel文件,第一步先实现PHP模板导出不带数据
今天继续研究PHP导出excel文件,把复杂的事情简单化,一步步实现功能,首先实现模板文件的导出,随后再实现写入数据后导出,最终实现功能,这是基本思路.中间可以加一步,先自己写入数据导出试试,随后再数 ...
- CF#135 D. Choosing Capital for Treeland 树形DP
D. Choosing Capital for Treeland 题意 给出一颗有方向的n个节点的树,现在要选择一个点作为首都. 问最少需要翻转多少条边,使得首都可以到所有其他的城市去,以及相应的首都 ...
- MOS管和三极管开关特性
不知道对不对? 待续!!!
- Android 仿百度手机助手首页滑动效果
今天看到百度手机助手首页上的滑动效果非常nice,主要功能归结为: 1.当手指上划时,顶部搜索栏随手指移动距离而缩小到隐藏,隐藏后内容还是可以继续移动 2.手指下滑时,当显示内容达到第一个时,顶部搜索 ...
- Python-MD5加密算法接口测试
前言 在之前的Python系列的随笔中,我跟小伙伴们讲述了Python-AES加密算法接口测试和Python-SHA256加密算法接口测试,今天我们来学习一下登录密码是md5加密的情况下,该如何使用p ...
- Kappa(cappa)系数只需要看这一篇就够了,算法到python实现
1 定义 百度百科的定义: 它是通过把所有地表真实分类中的像元总数(N)乘以混淆矩阵对角线(Xkk)的和,再减去某一类地表真实像元总数与被误分成该类像元总数之积对所有类别求和的结果,再除以总像元数的平 ...
- python3.x 基础二:内置函数
自带的函数可以非常简单快捷的实现某些功能, 比如产生一个序列,可以用循环实现: count = 0 while count < 10: print(count) count+=1 但其实用ran ...
- python3.x 基础一:dict字典
字典,{key,value} help(dict) 定义一个字典: >>> dict1 {', 'name': 'yzw'} >>> dict2=dict1 > ...
- strut2登陆注册验证码
1. 生成图片和验证码 package com.jmu.code; import java.awt.Color; import java.awt.Font; import java.awt.Graph ...