算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)
目录
1 问题描述
问题描述
摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用' * '表示' . ',中间空格用' | '表示,只转化字符表。
摩尔斯码定义见:http://baike.baidu.com/view/84585.htm?fromId=253988。
![](http://lx.lanqiao.cn/RequireFile.do?fid=dafbnrF3)
摩尔斯码定义见:http://baike.baidu.com/view/84585.htm?fromId=253988。
提示
清橙进行评测时,输入是以EOF结尾的,而不是换行符。(EOF不是一个字符,“以EOF结尾”是一种通俗但不严谨的说法。)因此可以通过以下方式之一获取输入:
1. 一次读入整行字符串,再进行后续解析。
2. 使用getchar或scanf一次读入一个字符,通过它们的返回值判断输入结束。
1. 一次读入整行字符串,再进行后续解析。
2. 使用getchar或scanf一次读入一个字符,通过它们的返回值判断输入结束。
样例输出
2 解决方案
具体代码如下:
import java.util.ArrayList; import java.util.Scanner; public class Main { public char getOneChar(String A) { char result = 0; if(A.equals("*-")) result = 'a'; else if(A.equals("-***")) result = 'b'; else if(A.equals("-*-*")) result = 'c'; else if(A.equals("-**")) result = 'd'; else if(A.equals("*")) result = 'e'; else if(A.equals("**-*")) result = 'f'; else if(A.equals("--*")) result = 'g'; else if(A.equals("****")) result = 'h'; else if(A.equals("**")) result = 'i'; else if(A.equals("*---")) result = 'j'; else if(A.equals("-*-")) result = 'k'; else if(A.equals("*-**")) result = 'l'; else if(A.equals("--")) result = 'm'; else if(A.equals("-*")) result = 'n'; else if(A.equals("---")) result = 'o'; else if(A.equals("*--*")) result = 'p'; else if(A.equals("--*-")) result = 'q'; else if(A.equals("*-*")) result = 'r'; else if(A.equals("***")) result = 's'; else if(A.equals("-")) result = 't'; else if(A.equals("**-")) result = 'u'; else if(A.equals("***-")) result = 'v'; else if(A.equals("*--")) result = 'w'; else if(A.equals("-**-")) result = 'x'; else if(A.equals("-*--")) result = 'y'; else if(A.equals("--**")) result = 'z'; return result; } public String getOneString(char[] A, int start, int end) { StringBuilder result = new StringBuilder(""); for(int i = start;i <= end;i++) result.append(A[i]); return result.toString(); } public void printResult(String A) { int len = A.length(); if(len < 1) return; char[] arrayA = A.toCharArray(); ArrayList<Character> list = new ArrayList<Character>(); for(int i = 0;i < len;i++) { int start = i; int end = i; for(;end < len;end++) { if(arrayA[end] == '|') break; } String tempA = getOneString(arrayA, start, end - 1); list.add(getOneChar(tempA)); i = end; } //输出最终结果 for(int i = 0;i < list.size();i++) System.out.print(list.get(i)); } public static void main(String[] args) { Main test = new Main(); Scanner in = new Scanner(System.in); String A = in.nextLine(); test.printResult(A); } }
每天一小步,成就一大步