UVA 508 Morse Mismatches JAVA
题意:输入字母和数字的编码,输入词典,输入一段编码,求出对应的单词。
思路:来自https://blog.csdn.net/qq_41163933/article/details/82224703
import java.util.ArrayList;
import java.util.Scanner;
import javax.management.ImmutableDescriptor;
import javax.xml.bind.SchemaOutputResolver; public class Main {
static char[] wordAndNum=new char[50];//存字母和数字
static ArrayList<String> morse=new ArrayList<>();//存摩斯密码
static ArrayList<String> dictionary=new ArrayList<>();//存词典
static ArrayList<String> wait=new ArrayList<>();//输入的编码,等待解码
static ArrayList<String> dicMorse=new ArrayList<>();//词典的莫斯码
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
for(int i=0;;i++)//存字母数字和其对应的摩斯密码
{
String input=scanner.next();
if(input.charAt(0)=='*')
break;
wordAndNum[i]=input.charAt(0);
morse.add(scanner.next());
} while(scanner.hasNext())//存词典
{
String input=scanner.next();
if(input.charAt(0)=='*')
break;
dictionary.add(input);
} while(scanner.hasNext())//存等待解码的密码
{
String input=scanner.next();
if(input.charAt(0)=='*')
break;
wait.add(input);
} for(int i=0;i<dictionary.size();i++)//把词典里面的单词转为string,存到dicMorse
{
String dicMor=dicCast(dictionary.get(i));
dicMorse.add(dicMor);
} for(int i=0;i<wait.size();i++)
{
System.out.println(solve(wait.get(i)));
}//将摩斯码解密为词组 } private static String solve(String string) {
int jz_n=-1,jz=0; //精准匹配的下标,个数
int mh_n=-1,mh=0,mh_length=999; //模糊匹配的下标,个数,模糊字符长度
int length=string.length();//定义摩斯码的长度
int dicmor_length;//定义词组摩斯码的长度;
int num;//匹配的长度
for(int i=0;i<dicMorse.size();i++)
{//遍历每个词组对应的摩斯码
num=0;
dicmor_length=dicMorse.get(i).length();
for(int j=0;j<length&&j<dicmor_length;j++)
{
if(string.charAt(j)==dicMorse.get(i).charAt(j))
num++;
else
break;
}
if(num==dicmor_length&&length==dicmor_length)//当需要解密的摩斯码和词组中的摩斯码完全相等时,则为精准匹配
{
if(jz_n<1)//第一个精确匹配的就是答案
jz_n=i;
jz++;
}
else if((num==dicmor_length&&length>num)||(num==length&&dicmor_length>num))
{//模糊:前面匹配,但:①本身的长度大于词典的密码长;
//或②词典的密码长度大于本身长度
if(mh_length>Math.abs(dicmor_length-length))
{
mh_length=Math.abs(dicmor_length-length);
mh_n=i;
mh++;
}
}
}
if(jz>0)
{
if(jz>1)
return dictionary.get(jz_n)+"!";
else
return dictionary.get(jz_n);
}
else if(mh>0)
return dictionary.get(mh_n)+"?";
else return dictionary.get(0);
}
static String dicCast(String string)//把词典里面的单词转为string
{
String res="";
for(int i=0;i<string.length();i++)
{
for(int j=0;j<26+10;j++)//<26+10
{
if(string.charAt(i)==wordAndNum[j])
{
res+=morse.get(j);
break;
}
}
}
return res;
} }
UVA 508 Morse Mismatches JAVA的更多相关文章
- uva 508 - Morse Mismatches(摩斯码)
来自https://blog.csdn.net/su_cicada/article/details/80084529 习题4-6 莫尔斯电码(Morse Mismatches, ACM/ICPC Wo ...
- uva 508 Morse Mismatches
Samuel F. B. Morse is best known for the coding scheme that carries his name. Morse code is still us ...
- UVa 508 Morse Mismatches (模糊暴力)
题意:莫尔斯电码,输入若干个字母的Morse编号,一个字典和若干编码.对于每个编号,判断它可能的是哪个单词, 如果有多个单词精确匹配,输出第一个单词并加一个“!”:如果无法精确匹配,那么在编码尾部增加 ...
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- 【习题 4-6 UVA - 508】Morse Mismatches
[链接] 我是链接,点我呀:) [题意] 给你每个字母对应的摩斯密码. 然后每个单词的莫斯密码由其组成字母的莫斯密码连接而成. 现在给你若干个莫斯密码. 请问你每个莫斯密码对应哪个单词. 如果有多个单 ...
- UVa 11059 最大乘积 java 暴力破解
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- UVa 1646 (递推 JAVA大数) Edge Case
题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系, ...
- UVA 1590 IP Networks JAVA
题意:输入m代表接下来的数据个数,计算接下来输入数据的网络掩码,和最小网络地址. 思路:①子网掩码:先将数据转为二进制,判断从哪一位开始有数据不一样,记下下标index,则子网掩码是index的前面是 ...
- UVa 495【大数加法】
UVa 495 求第n位斐波那契数列,n<=5000. 还是大数问题,这次是大数加法.仿照UVa 623的解法来做.623位数可以一位一位的增,但是这个需要预先给够位数,要是按六位存一个数组元素 ...
随机推荐
- select下拉框使用完毕后,重置按钮使其清空
需求描述:select下拉框后边有两个按钮,一个查询,一个重置,点击重置,select会清空之前选择的那个查询条件 解决思路:卧槽,这不so easy 么,用那个jQ封装的trigger函数搞定啊,对 ...
- 广工赛-hdu6469-树链压缩/二分
比较复杂的一题.. 不管是二分答案还是直接做,都需要压缩树链 /* 给定n种怪物,每个怪物有属性a[i] 打死第i种怪物后,第i只怪物会分裂成a[i]个第i-1种怪 如果打死的是第1种,那么获得经验a ...
- String 类的实现(2)引用计数与写时拷贝
1.引用计数 我们知道在C++中动态开辟空间时是用字符new和delete的.其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间.如图示其中保存N ...
- Python数据类型之字符串
一:概述 Python中的字符串的一些概念 可以看作是字符的集合,在数据类型里没有单个字符的数据类型,可以用单个字符表示的一个字符串数据类型 字符串是一种不可变的序列类型,单个字符从左到右按照顺序排列 ...
- Java+selenium之WebDriver的cookie,等待等高级操作(五)
1. 操作cookie // 增加一个 name = "name",value="value" 的 cookie Cookie cookie = new Coo ...
- python编程实现十进制的转换(十进制到任何进制不用系统函数实现)
# 用户给定一个十进制数据,以及进制n, 完成n进制的转换,输出结果给用户(不要借助已有函数) # 用户的输入进制数据Decdata = int(input("请输入一个十进制数据:&quo ...
- HDU 2588 GCD(欧拉函数)
GCD Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- JDK1.7 Update14 HotSpot虚拟机GC收集器
在测试服务器上使用如下命令可以查看当前使用的 GC收集器,当然不止这一个命令可以看到,还有其他一些方式 第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了 [csii@ ...
- Quartz.net入门
简介 Quartz.NET是一个开源的作业调度框架,是OpenSymphony的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不 ...
- (2).NET CORE微服务 Micro-Service ---- .NetCore启动配置 和 .NetCoreWebApi
什么是.Net Core?.Net Core是微软开发的另外一个可以跨Linux.Windows.mac等平台的.Net.Net Core相关知识看文章地步dotnet dllname.dll 运行P ...