闯关第五关的题目,一个中级题和一个高级题。中间题比較简单,半个小时完毕了。题目例如以下

实现一个简易的银行排号叫号系统

get    取号                     演示样例:"get"或"get vip"

call   叫号                     演示样例:"call"

delete 删除号码                 演示样例:"delete 5"

count  获取当前排队总人数       演示样例:"count"

countN 获取号码N曾经的排队人数  演示样例:"countN"

reset  重置排号机               演示样例:"reset"

quit   退出排号机               演示样例:"quit"

每行仅仅会有一条输入(比方:C语言可使用gets函数获取一行输入命令的字符串)。

1、若输入不符合要求(如:命令字非法,或其它觉得输入的错误)均需输出"error"

2、每条输出后使用换行符隔开(如后面演示样例)

输出:

1)取号。可获取普通号和vip号码。如初始状态,输入"get",则获取普通号码,运行结果为"1",如再次输入"get vip",则获取VIP号码,运行结果为"vip 2"。假设末尾的2号被删除,则再次调用"get"时应输出"2"

VIP号码有绝对的优先级。普通号和vip号码统一编号。取号均为连续号码。号码从1開始编号。最大为100000.

2)叫号。

获取当前应该处理用户的号码。比如当前排队号码为1 2 3 4 5 7。当输入"call",运行结果为"1",如1为vip号码,则为"vip 1".假设再连续调用6次,第六次运行结果应为"error"

3)删除号码。客户不想办理时可删除号码。叫号时则跳过此号码。比如当前排队号码为1 2 3 4 5,输入"delete 5",运行结果为"5",假设5为vip则显示"vip 5"。再次输出"delete 5",运行结果为"error"

4)获取当前排队总人数。获取当前排队人数。比如当前排队号码为1 2 3 4 5 6,运行结果为"6"

5)获取在某个号码之前排队的总人数。

比如当前排队号码为1 2 3 4 5 7,输入"countN 7",运行结果为"5"

6、重置排号机。比如输入"reset",则重置排号机,进入初始状态,无需输出。

7、退出排号机。比如输入"quit",则退出排号机,无需输出。

例子输入:

get

get

get

get vip

count

countN 1

call

quit

例子输出:

1

2

3

vip 4

4

1

vip 4

我的

package breakthrough;

import java.util.LinkedList;
import java.util.Scanner;
/**
* 实现一个简易的银行排号叫号系统 * @author snail
*
*/
public class Main {
private static LinkedList<String> queue = new LinkedList<String>();
private static LinkedList<String> vipQueue = new LinkedList<String>();
private static int count = 0;
private static int mulCall = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = "";
boolean endFlag = false;
while(!endFlag){
string=scanner.nextLine();
if (string.contains("get")) {
get(string);
}else if (string.contains("call")) {
call(); }else if (string.contains("delete")) {
delete(string); }else if (string.equals("count")) {
count(); }else if (string.contains("countN")) { countN(string);
}else if (string.equals("reset")) {
reset(); }else if(string.equals("quit")){
endFlag = true;
}else{
System.out.println("error");
}
}
scanner.close(); } /*
* 取号。可获取普通号和vip号码。 * 如初始状态,输入"get",则获取普通号码,运行结果为"1",
* 如再次输入"get vip",则获取VIP号码,运行结果为"vip 2"。 * 假设末尾的2号被删除。则再次调用"get"时应输出"2"        
* VIP号码有绝对的优先级。普通号和vip号码统一编号,取号均为连续号码。
* 号码从1開始编号,最大为100000.
*/
public static void get(String string) {
count++;
mulCall = 0;
if (string.equals("get")) {
queue.add(String.valueOf(count));
System.out.println(count);
}else if (string.equals("get vip")) {
vipQueue.add("vip "+count);
System.out.println("vip "+count);
}else {
System.out.println("error");
}
} /*
* 叫号。 获取当前应该处理用户的号码。
* 比如当前排队号码为1 2 3 4 5 7,
* 当输入"call",运行结果为"1",
* 如1为vip号码,则为"vip 1".
* 假设再连续调用6次,第六次运行结果应为"error"
*/
public static void call() {
if (!queue.isEmpty()||!vipQueue.isEmpty()) {
mulCall++;
if (mulCall == 6) {
System.out.println("error");
}else{
if (!vipQueue.isEmpty()) {
System.out.println(vipQueue.remove(0));
}else{
System.out.println(queue.remove(0));
} } }else{
System.out.println("error");
}
} /*
*删除号码。 *客户不想办理时可删除号码,叫号时则跳过此号码。 *比如当前排队号码为1 2 3 4 5,输入"delete 5"。运行结果为"5"。
*假设5为vip则显示"vip 5"。 再次输出"delete 5",运行结果为"error"
*/
public static void delete(String string) {
String[] string2 = string.split(" ");
if (string2.length != 2 ||!string2[1].matches("\\d")) {
System.out.println("error");
return;
}else { for (int i = 0; i < vipQueue.size(); i++) {
if (vipQueue.get(i).contains(string2[1])) {
System.out.println(vipQueue.remove(i));
return;
}
}
for (int i = 0; i < queue.size(); i++) {
if (queue.get(i).contains(string2[1])) {
System.out.println(queue.remove(i));
return;
}
} System.out.println("error");
return;
} } public static void count() {
System.out.println(queue.size()+vipQueue.size());
return;
} public static void countN(String string) {
String[] string2 = string.split(" ");
if (string2.length != 2 ||!string2[1].matches("\\d")) {
System.out.println("error");
return;
}else { int vipLength = vipQueue.size();
for (int i = 0; i < vipLength; i++) {
if (vipQueue.get(i).contains(string2[1])) {
System.out.println(i);
return;
}
} int length = queue.size();
for (int i = 0; i < length; i++) {
if (queue.get(i).equals(string2[1])) {
//System.out.println("vipLength"+vipLength+",i"+i);
System.out.println(i+vipLength);
return;
}
}
System.out.println("error");
return;
}
} public static void reset() {
queue.clear();
vipQueue.clear();
count = 0;
mulCall = 0;
} }

华为OJ训练之 简易的银行排号叫号系统的更多相关文章

  1. 华为OJ:火车进站

    火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...

  2. 在华为oj的两个月

    一次偶然的机会,我接触到华为oj平台(http://career-oj.huawei.com/exam/camLogin.jsp),当时的心情很是兴奋,于是立马注册开通,然后迫不及待地上去做题.刚开始 ...

  3. Python 小案例实战 —— 简易银行存取款查询系统

    Python 小案例实战 -- 简易银行存取款查询系统 涉及知识点 包的调用 字典.列表的混合运用 列表元素索引.追加 基本的循环与分支结构 源码 import sys import time ban ...

  4. C#:根据银行卡卡号判断银行名称

    原文地址:android 根据银行卡卡号判断银行 原文是 java ,现在将它翻译成 C# ,并对代码重新编排整理,博主是一个今年刚出来的应届毕业生,不足之处请多多包涵. 根据银行卡号判断所属银行,依 ...

  5. ytu 1067: 顺序排号(约瑟夫环)

    1067: 顺序排号 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 31  Solved: 16[Submit][Status][Web Board] ...

  6. C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考

    问题描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号. 分析: 首先由用户输入人数n,然后对这n个人进行编号[因为如果不编号的话 ...

  7. 银行综合储蓄业务系统,水平为学了一年C语言

    银行综合储蓄业务系统 #include <stdio.h> #include<string.h> int acccunt = 0; char name[10],pw[10]; ...

  8. C#:根据银行卡卡号推断银行名称

    原文:C#:根据银行卡卡号推断银行名称 原文地址:android 根据银行卡卡号判断银行 原文是 java ,现在将它翻译成 C# ,并对代码重新编排整理,不足之处请多多包涵. 根据银行卡号判断所属银 ...

  9. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询(转)

    在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后 ...

随机推荐

  1. Mac OSX 系统目录结构(转)

    摘要 在OS X的系统中,不再有Windows用户熟悉的C盘.D盘,这是因为OS X底层是Unix系统,其目录机构符合Unix系统的规范.MAC机器主板使用了Intel主导的EFI标准,硬盘分区格式采 ...

  2. plsql只有注释显示问号,其余中文可以正常显示

    在plsql客户端查看表信息,注释均为乱码,使用select 查询字段中中文字符正常,以下为解决方案: 1.使用语句 select * from V$NLS_PARAMETERS 查询 nls_lan ...

  3. ThreadLocal实现session中用户信息 的线程间共享

    转载自:http://blog.sina.com.cn/s/blog_4b5bc01101013gok.html ThreadLocal并不难理解,我总结的最简单的理解就是: ThreadLocal像 ...

  4. SWIG 快速入门

    SWIG 安装 本文使用了 SWIG 版本 2.0.4(参见 参考资料 获取下载站点的链接).要构建和安装 SWIG,可按照典型的开源安装流程,在命令提示符下输入以下命令: 请注意,为前缀提供的路径必 ...

  5. c++学习之多态(虚函数和纯虚函数)

    c++是面向对象语言,面向对象有个重要特点,就是继承和多态.继承之前学过了,就是一种重用类的设计方式.原有的类叫父类,或者基类,继承父类的类叫子类.在设计模式中,我们总是要避免继承,推荐用组合.因为继 ...

  6. Tensorflow 深度学习简介(自用)

    一些废话,也可能不是废话.可能对,也可能不对. 机器学习的定义:如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称这个程序可以在经验中学习. “程序”指的是需要用到的机器学习算法 ...

  7. linux查看当前shell的方法

    这篇文章主要对比一下 source 命令执行shell文件和 ./ping.sh 这种方式执行shell文件的区别. 1. source   ping.sh 这个是在当前的shell 中执行 ping ...

  8. Hidden Markov Model Toolbox for Matlab

    官网:http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html Download Click here. Unziping creates a direc ...

  9. (剑指Offer)面试题10:二进制中1的个数

    题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 很明显,这道题考察的是位运算. 1.依次将整数右移,判断整数最后一位是否为1(&1): 问题:如果该整数为负数 ...

  10. span中内容随着数字长度的添加而增大

    场景:导航条中数据,当数据量不大时.仅仅会显示几页,数字仅仅有1,2.3,4..,数字写在span标签中, 则span不须要多宽.设置固定宽度就能够,但当数据量很大的.比如:日志管理--有增 删 改就 ...