描述
输入
一共有不超过int范围行,每行为一个字符串(int范围)。注意,每行是可以以空格开头的。
输出
情报破译后得到的内容。每条情报对应输出一行。
样例输入
样例输出
A国和B国正在进行一场战争。A国通过间谍知道B国的情报加密规则为:
1. 仅对字母加密,其他符号保留(如空格,逗号等)
2. 对第i个单词(i从1开始)的加密方法是把第i个单词反转(如abc变成cba),然后对单词内的每个字母采用经典的Caesar加密法,循环后移i个字母。例如:第5个单词的加密表如下所示:
密码字母:A B C D E F G H I J K L M N O P Q R S T U VW X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P QR S T U
3. 单词的定义是:任何一串极大的连续字母串。
比如,样例输出第三行,第二个单词为ba,反转后为ab,a后移2个单词变成c,b后移两个单词变成d,故该单词加密后为cd(见样例输入第三行)。
现在A国又截获了一些B国的情报密文。请你帮A国破译出情报的内容。
fiU umncv oolz ioex jhfqu, zg uh zqI nlaxO ockl yz kmpzgE. fX gxcj , ghlsxffr cxmG K. ab3cd
The talks will take place, at an Air Force base on Sunday. We have , occupied City F. az3ba
代码实现
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package test1;
import java.lang.*;
/**
*
* @author Sapphire
*/
public class Test1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args)throws Exception {
// TODO code application logic here
String time=javax.swing.JOptionPane.showInputDialog("请输入密文");
int length=time.length();
int count=0,t=0,k=0;
char[] msg=new char[length];
char[] mesg=new char[100];
for(int i=0;i<length;i++){
msg[i]=time.charAt(i);
}
for(int m=0;m<length;m++){
if(msg[m]>='a'&&msg[m]<='z'||msg[m]>='A'&&msg[m]<='Z'){
mesg[t]=msg[m];
t++;
if(m==length-1){
count++;
k=m;
for(int n=0;n<t;n++){
int ik=mesg[n]-count;
if(!(ik>64&&ik<91||ik>96&&ik<123))
ik=ik+26;
mesg[n]=(char)ik;
msg[k]=mesg[n];
k--;
}
}
}
else{
count++;
k=m-1;
for(int n=0;n<t;n++){
int ik=mesg[n]-count;
if(!(ik>64&&ik<91||ik>96&&ik<123))
ik=ik+26;
mesg[n]=(char)ik;
msg[k]=mesg[n];
k--;
}
if(!(msg[m+1]>='a'&&msg[m+1]<='z'||msg[m+1]>='A'&&msg[m+1]<='Z')){
m++;
}
else{
t=0;
continue;
}
}
}
for(int i=0;i<length;i++){
System.out.print(msg[i]);
}
//System.out.println(count);
}
}