java.李雷和韩梅梅的加密纸条
题目:
李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传小纸条。为了不被老师发现他们纸条上说的是啥,他们约定了如下方法传递信息:将26个英文字母(全为大写),外加空格,一共27个字符分成3组,每组9个。也就是ABCDEFGHI是第一组,JKLMNOPQR是第二组,STUVWXYZ是第三组(此处用代表空格)。
然后根据传递纸条那天的日期,改变字母的位置。先根据月份数m,以整个分组为单位进行循环左移,移动(m-1)次。然后根据日期数d,对每个分组内的字符进行循环左移,移动(d-1)次。以3月8日为例,首先移动分组,3月需要循环左移2次,变成:STUVWXYZ*,ABCDEFGHI,JKLMNOPQR。然后每组内的字符,8日的话需要循环左移7次,最终的编码为:Z*STUVWXY,HIABCDEFG,QRJKLMNOP。
对于要传递信息中的每个字符,用组号和组内序号两个数字来表示。如果在3月8日传递信息“HAPPY”,那么H位于第2组的第1个,A位于第2组第3个,P位于第3组第9个,Y位于第1组第9个,所以纸条上会写成:21 23 39 39 19。
现在给定日期和需要传递的信息,请输出应该写在纸条上的编码。
输入规范:
每个输入包含两行。第一行是用空格分隔的两个数字,第一个数字是月份,第二个数字是日子。输入保证是一个合法的日期。
第二行为需要编码的信息字符串,仅由A~Z和空格组成,长度不超过1024个字符。
输出规范:
对每个输入,打印对应的编码,数字之间用空格分隔,每个输出占一行。
输入示例1:
1 1
HI
输出示例1:
18 19
输入示例2:
3 8
HAPPY
输出示例2:
21 23 39 39 19
输入示例3:
2 14
I LOVE YOU
输出示例3:
35 25 18 12 29 31 25 23 12 28
源码:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class Test3 {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextLine()) {String date = in.nextLine();String word = in.nextLine();String res = helper(date, word);System.out.println(res);}}private static String helper(String date, String word) {String[] res = null;StringBuilder sb = new StringBuilder();String[] str1 = date.split(" ");int month = Integer.parseInt(str1[0]);int day = Integer.parseInt(str1[1]);month = (month - 1) % 3;if (month == 1) {res = new String[]{"JKLMNOPQR", "STUVWXYZ*", "ABCDEFGHI"};} else if (month == 2) {res = new String[]{"STUVWXYZ*", "ABCDEFGHI", "JKLMNOPQR"};} else {res = new String[]{"ABCDEFGHI", "JKLMNOPQR", "STUVWXYZ*"};}change(res, day);Map<Character, Integer> map = table(res);int pos = 0;for (int i = 0; i < word.length(); i++) {pos = map.get(word.charAt(i));sb.append(pos + " ");}return sb.toString();}private static Map<Character, Integer> table(String[] str) {Map<Character, Integer> map = new HashMap<>();char[] chars = null;String s = null;for (int i = 1; i < 4; i++) {s = str[i - 1];chars = s.toCharArray();for (int j = 0; j < chars.length; j++) {if (chars[j] == '*') {map.put(' ', (i * 10 + j + 1));continue;}map.put(chars[j], (i * 10 + j + 1));}}return map;}private static void change(String[] str, int day) {int time = (day - 1) % 9;int i = 0;String s = null;String tmp = null;String tmp2 = null;while (i < 3) {s = str[i];tmp = s.substring(0, time);tmp2 = s.substring(time);str[i] = tmp2 + tmp;i++;}}
}
java.李雷和韩梅梅的加密纸条相关推荐
- 01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础
在微服务架构盛行的今天,我们不得不先聊一聊这是个什么鬼.我们来做一个比喻,一个应用好比一个公司,在垂直应用中,就好比我们要做一件事情,所有员工都按照CEO的指挥来做事情.随着公司的发展,事情越来越多, ...
- java之php、Android、JAVA、C# 3DES加密解密
异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...
- java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)
RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...
- Java实现SSH模式加密
版权声明:欢迎转载,请注明沉默王二原创. https://blog.csdn.net/qing_gee/article/details/44409735 Java实现SSH模式加密 一.SSH加密原理 ...
- C# Java间进行RSA加密解密交互
C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...
- 李雷和韩梅梅的一次转账事务–事务系统概述
上次我们在最后一部分,给出了一个事务操作的模型和内部简单实现的方式,以期让大家能针对事务有一个比较简单的印象.今天,我就尝试针对事务的基本特性做一个简单的概述.当然,因为仍然是概述,所以不会特别深入的 ...
- java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...
- java中的md5加密_java中的MD5加密
java中的MD5加密 2016-01-22 09:07:00 admin 原创 1144 摘要:java中的MD5加密 /** * * md5加密 * @author LiuJiawan * @da ...
- php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容
/** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author: Luo Hui (farmer.luo at gmail.com) * ...
最新文章
- 用Transformer定义所有ML模型,特斯拉AI总监Karpathy发推感叹AI融合趋势
- RequireJS和AMD规范
- iOS自动布局框架-Masonry详解
- python3项目-30 个惊艳的Python开源项目
- [一] 详细讲解: 线性表链式存储结构 中的 单链表; (数据结构和算法)
- rotateright_Java Long类rotateRight()方法的示例
- RUNOOB python练习题25 递归实现阶乘
- 打开word2007总是出现配置进度_实战经验:Word 2007每次打开都弹出正在配置
- 是男人就下100层【第五层】——2048游戏从源码到发布市场
- 新手做2D手游该用哪些工具?
- b样条和三次样条_B样条(贝塞尔曲线和b样条曲线)
- 「消息秒回」是一种美德
- 可以使用GPU暴力破解密码的软件
- NetBeans安装
- 梦幻西游ps计算机,五开选择PS与NE:那是因为效率高的缘故
- 外接硬盘在电脑中不显示的解决方案
- 面试必看:java面试考点精讲视频教程
- 你的死工资,正在拖垮你一辈子需要花多少钱
- 文献阅读(77)稀疏跳零结构(1)
- 谓词逻辑在计算机中的,谓词逻辑与归纳原理1.ppt
热门文章
- 刻录CD-R:cdrecord 和cdparanoia之Linux基本的应用程序
- mfc快捷键设置 | vc++6.0热键设置
- 编写一个函数,模拟微信发红包的红包分配过程。函数有两个参数:一个参数表示红包总金额,默认值为100,另一个参数表示红包数量,默认为10。程序输入:红包总金额和红包数量;程序输出:每个红包的金额。要求:
- Kaldi 对说话人识别GMM-UBM的MAP 参数更新和对数似然概率解读
- 关于SQL Server 2008R2本地服务的数据库引擎里没有实例名问题
- PDFbox基本操作
- unicode编码转换为中文
- 4.5the Culing Pass
- java 爬虫 百度贴吧_实现任意百度贴吧的爬虫
- 贝叶斯估计的理解及例子