真的不知道这个题目。。。有什么意思。。
不想解释了。。
直接贴代码了。。想要的就拿去AC好了。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DotheUntwist {
public static void main(String[] args) {
Scanner scaner = new Scanner(System.in);
while(scaner.hasNextLine()){
String inputStr = scaner.nextLine();
String[] params = inputStr.split(" ");
if(params.length ==1){
break;
}
int key = Integer.parseInt(params[0]);
String deciperStr = deciper(key,params[1]);
System.out.println(deciperStr);
}
}
private static String deciper(int key, String string) {
List<Integer> ciperCode = new ArrayList<Integer>();
List<Integer> plainCode = new ArrayList<Integer>();
for(char c:string.toCharArray()){
int code = convertToCode(c);
ciperCode.add(code);
plainCode.add(code);
}
for(int i=0;i<ciperCode.size();i++){
int code = ciperCode.get(i);
resolveCode(plainCode,i,key,code,ciperCode.size());
}
StringBuffer plainText = new StringBuffer();
for(Integer i: plainCode){
plainText.append(convertToChar(i));
}
return plainText.toString();
}
private static void resolveCode(List<Integer> plainCode, int i, int key, int code, int size) {
int pos = (key*i)%size;
plainCode.set(pos, (code+i)%28);
}
private static char convertToChar(int i){
if(i>0 && i<27){
return (char)(i+96);
}
if(i == 0){
return '_';
}
if(i == 27){
return '.';
}
return ' ';
}
private static int convertToCode(char ch){
if(ch>=97 && ch<=122){
return ch-96;
}
if(ch == '_'){
return 0;
}
if(ch == '.'){
return 27;
}
return -1;
}
}