1.题目描述:给出原文字符串str,通过对字符串的每个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量。数组a的前三位已经赋值:a[0]=1,a[1]=2,a[2]=4,当i>=3时,数组元素a[i]=a[i-1]+a[i-2]+a[i-3]。
- 例如:原文abcde加密后bdgkr,其中偏移量分别是1,2,4,7,13。
- 输入描述:第一行是整数n,表示n组测试数据。每组数据包含一行,原文str(只含有小写字母,长度大于0小于50)。
- 输出描述:每组测试数据输出一行,表示密文。
public static void tm001(){
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String line1 = scanner.nextLine();
int count = Integer.parseInt(line1);
List<String> stringList = new ArrayList<>();
int maxLen = 0;
for (int i = 0; i < count; i++) {
String input = scanner.nextLine();
if (input.length() > maxLen){
maxLen = input.length();
}
stringList.add(input);
}
int[] moveArr = new int[Math.max(maxLen, 3)];
moveArr[0] = 1;
moveArr[1] = 2;
moveArr[2] = 4;
for (int i = 3; i < maxLen; i++) {
moveArr[i] = (moveArr[i-1] + moveArr[i-2] + moveArr[i-3]) % 26;
}
for (String line : stringList) {
char[] chars = line.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
int move = moveArr[i];
int result = ((chars[i] - 97) + move)%26 + 97;
stringBuilder.append((char)result);
}
System.out.println(stringBuilder);
}
}
}