zoukankan      html  css  js  c++  java
  • 来自于罗马的凯撒大帝最早的密码

    据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第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 M 
    原文字母: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 
    (注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)
    输入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成: 
    1.  起始行:START 
    2.  密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息. 
    3.  结束行:END 
    在最后一个数据集之后,是另一行:ENDOFINPUT。
    输出:
    每个数据集对应一行,是凯撒的原始消息。
    n   Sample Input
    START
    NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
    END
    START
    N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
    END
    START
    IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
    END
    ENDOFINPUT
    n   Sample Output
    IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
    I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
    DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE

        //密码解析
        public class PasswordParse{
            //破解密码(一段/一行密码)的方法
            public void pwdParse(String str){
                for(int i=0;i<str.length();i++){
                    char c = str.charAt(i);
                    if('A'<=c&&c<='Z'){
                            if(c-5<'A'){
                                System.out.print((char)('Z'-'A'+c-5));
                            }
                            else{
                                System.out.print((char)(c-5));
    
                            }
                        }
                    else
                        System.out.print((char)c);
                }
                System.out.println();
            }
            //执行破解之前对整段密文的整理解析
            public void doParse(String[] str){
                for(String s : str){
                    if(s.startsWith("START")){
                        String pwd = (s.split("START")[1]).split("END")[0];
                        pwdParse(pwd);
                    }
                }
            }
            public static void main(String args[]){
                String[] strs={
                "START NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END",
                "START N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ END",
                "START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END",
                "ENDOFINPUT"
                };
                new PasswordParse().doParse(strs);
            }
        }
  • 相关阅读:
    学习进度——第五周
    构建之法阅读笔记02
    学习进度——第四周
    整型数组——首尾相连
    构建之法阅读笔记01
    二维数组
    学习进度——第三周
    新最大子数组——数量级和数量无限大
    最大子数组求和
    P3388 【模板】割点(割顶)题解 tarjan求割点
  • 原文地址:https://www.cnblogs.com/laoquans/p/2963327.html
Copyright © 2011-2022 走看看