真的不知道这个题目。。。有什么意思。。
不想解释了。。
直接贴代码了。。想要的就拿去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; } }