题目:
李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传小纸条。为了不被老师发现他们纸条上说的是啥,他们约定了如下方法传递信息:将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.李雷和韩梅梅的加密纸条相关推荐

  1. 01【微服务爱情故事之李雷和韩梅梅】SpringBoot基础

    在微服务架构盛行的今天,我们不得不先聊一聊这是个什么鬼.我们来做一个比喻,一个应用好比一个公司,在垂直应用中,就好比我们要做一件事情,所有员工都按照CEO的指挥来做事情.随着公司的发展,事情越来越多, ...

  2. java之php、Android、JAVA、C# 3DES加密解密

    异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...

  3. java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)

    RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...

  4. Java实现SSH模式加密

    版权声明:欢迎转载,请注明沉默王二原创. https://blog.csdn.net/qing_gee/article/details/44409735 Java实现SSH模式加密 一.SSH加密原理 ...

  5. C# Java间进行RSA加密解密交互

    C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...

  6. 李雷和韩梅梅的一次转账事务–事务系统概述

    上次我们在最后一部分,给出了一个事务操作的模型和内部简单实现的方式,以期让大家能针对事务有一个比较简单的印象.今天,我就尝试针对事务的基本特性做一个简单的概述.当然,因为仍然是概述,所以不会特别深入的 ...

  7. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密

    如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...

  8. java中的md5加密_java中的MD5加密

    java中的MD5加密 2016-01-22 09:07:00 admin 原创 1144 摘要:java中的MD5加密 /** * * md5加密 * @author LiuJiawan * @da ...

  9. php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容

    /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author: Luo Hui (farmer.luo at gmail.com) * ...

最新文章

  1. 用Transformer定义所有ML模型,特斯拉AI总监Karpathy发推感叹AI融合趋势
  2. RequireJS和AMD规范
  3. iOS自动布局框架-Masonry详解
  4. python3项目-30 个惊艳的Python开源项目
  5. [一] 详细讲解: 线性表链式存储结构 中的 单链表; (数据结构和算法)
  6. rotateright_Java Long类rotateRight()方法的示例
  7. RUNOOB python练习题25 递归实现阶乘
  8. 打开word2007总是出现配置进度_实战经验:Word 2007每次打开都弹出正在配置
  9. 是男人就下100层【第五层】——2048游戏从源码到发布市场
  10. 新手做2D手游该用哪些工具?
  11. b样条和三次样条_B样条(贝塞尔曲线和b样条曲线)
  12. 「消息秒回」是一种美德
  13. 可以使用GPU暴力破解密码的软件
  14. NetBeans安装
  15. 梦幻西游ps计算机,五开选择PS与NE:那是因为效率高的缘故
  16. 外接硬盘在电脑中不显示的解决方案
  17. 面试必看:java面试考点精讲视频教程
  18. 你的死工资,正在拖垮你一辈子需要花多少钱
  19. 文献阅读(77)稀疏跳零结构(1)
  20. 谓词逻辑在计算机中的,谓词逻辑与归纳原理1.ppt

热门文章

  1. 刻录CD-R:cdrecord 和cdparanoia之Linux基本的应用程序
  2. mfc快捷键设置 | vc++6.0热键设置
  3. 编写一个函数,模拟微信发红包的红包分配过程。函数有两个参数:一个参数表示红包总金额,默认值为100,另一个参数表示红包数量,默认为10。程序输入:红包总金额和红包数量;程序输出:每个红包的金额。要求:
  4. Kaldi 对说话人识别GMM-UBM的MAP 参数更新和对数似然概率解读
  5. 关于SQL Server 2008R2本地服务的数据库引擎里没有实例名问题
  6. PDFbox基本操作
  7. unicode编码转换为中文
  8. 4.5the Culing Pass
  9. java 爬虫 百度贴吧_实现任意百度贴吧的爬虫
  10. 贝叶斯估计的理解及例子