题目描述
NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提
供给你的将军。
消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A 都分别替换成字母F),其他字符不变,并且消息原文的所有字母都是大写的。密码中的字母与原文中的字母对应关系如下。
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
eg:
输入:
HELLO WORLD
SNHJ
输出:
CZGGJ RJMGY
NICE
以下是本篇文章正文内容,下面案例可供参考
解题思路
遍历每个字符,再转化为原文字符
字符转换操作:
int 和 char可以相互转化
eg:
(int)‘A’ —> 65
(char) 68 —> D
两个大写字母相减,一定等于转换为int后相减
‘A’ + 2 = ‘C’
‘D’ + 3 = ‘F’
相加后的值,不能超出Z的值
构造要转化的字符串(String Builder), 遍历字符串,获取每个字符的位置,如果是空格,直接拼接
若为字符,在E之后,-5;其余+21
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
前五个即为原文字母=密码字母+21,其余为密码字母-5
为了防止加到Z之后,超出
代码如下
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String str = sc.nextLine();
StringBuilder s = new StringBuilder();
for(int i = 0;i<str.length();i++) {
char ch = str.charAt(i);
if(ch==' '){
s.append(" ");
}else{
s.append((char)(ch>'E'?ch-5:ch+21));
}
}
System.out.println(s);
}
}
}