【华为上机】 实现一个简易的银行排号叫号系统(代码欠妥,求修改)
2014-08-14 15:08
399 查看
排号机 | |
描述: | 实现一个简易的银行排号叫号系统 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 |
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; import java.util.Stack; public class Main12 { enum Cmd {get,call,delete,count,countN,reset,quit}; public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin = new Scanner(System.in); String line; int count=1; List<Integer> nums = new ArrayList<Integer>(); List<Integer> vipnums = new ArrayList<Integer>(); int cnum=0; while (cin.hasNext()){ line = cin.nextLine(); String[] strs = line.split(" "); String mycmd = strs[0]; switch (mycmd) { case "get": cnum=0; if(count>100000){ System.out.println("error"); }else{ int c1=0,c2=0; if(nums.size()>0) c1 = Collections.max(nums); if(vipnums.size()>0) c2 = Collections.max(vipnums); count = c1>c2?c1+1:c2+1; if(strs.length==1){ System.out.println(count); nums.add(count); }else if(strs[1].equals("vip")){ System.out.println("vip "+count); vipnums.add(count); } else System.out.println("error"); } break; case "call": cnum++; if(cnum==6) System.out.println("error"); int num; if(vipnums.size()>0){ Collections.sort(vipnums); num = vipnums.get(0); System.out.println("vip "+num); vipnums.remove(0); }else if(nums.size()>0){ Collections.sort(nums); num = nums.get(0); System.out.println(num); nums.remove(0); }else System.out.println("error"); break; case "delete": cnum=0; int delnum; if(strs.length!=2){ System.out.println("error"); }else{ try{ delnum = Integer.parseInt(strs[1]); }catch (Exception e) { System.out.println("error"); break; } if(nums.contains(delnum)){ System.out.println(delnum); nums.remove(nums.indexOf(delnum)); }else if(vipnums.contains(delnum)){ System.out.println("vip "+delnum); vipnums.remove(vipnums.indexOf(delnum)); }else{ System.out.println("error"); break; } } break; case "count": cnum=0; System.out.println(nums.size()+vipnums.size()); break; case "countN": cnum=0; if(strs.length!=2){ System.out.println("error"); break; } int curnum; try{ curnum = Integer.parseInt(strs[1]); }catch (Exception e) { System.out.println("error"); break; } if(nums.contains(curnum)){ Collections.sort(nums); System.out.println(nums.indexOf(curnum)+vipnums.size()); }else if(vipnums.contains(curnum)){ Collections.sort(vipnums); System.out.println(vipnums.indexOf(curnum)); }else{ System.out.println("error"); } break; case "reset": cnum=0; nums.clear(); vipnums.clear(); count=1; break; case "quit": return; default: System.out.println("error"); break; } } } }
相关文章推荐
- 实现一个简易的银行排号叫号系统
- C语言-实现一个简易的银行排号叫号系统
- C++: 实现一个简易的银行排号叫号系统
- 简易的银行排号叫号系统(华为机试题目)
- 华为OJ训练之 简易的银行排号叫号系统
- 华为OJ训练之 简易的银行排号叫号系统
- 基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?
- 队列基本操作及银行简易排号的实现
- 利用jQuery+localStorage实现一个简易的计时器示例代码
- AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
- 一个简易的8位计算器,可实现加减乘除,testbench写的较为简易,代码覆盖率有点低。方法比较笨,综合之后的频率不高。
- 华为机试题:实现一个简易的银行叫号系统
- iOS实现一个简易日历代码
- 用Java代码实现改变一个文本中的内容,即将一个文本里的内容修改内容,并存储到另一个文本中
- JavaScript实现一个简易的计算器实例代码
- vue + socket.io实现一个简易聊天室示例代码
- 简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。
- 华为最新上机题(自己C实现代码)
- 一个简易时钟效果js实现代码
- 右键点击修改Grid的单列值,及修改全表的值,还有相同点击事件的代码简化,及如何双击关闭一个tabsheet