2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新)
"给你一串未加密的字符串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(只含有小写字母)
例如:
输入
1
xy
输出
ya
java
public class StringEncrypt {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int stringLine = Integer.parseInt(sc.nextLine());
String[]encrypts = new String[stringLine];
for (int i = 0; i < stringLine; i++){
encrypts[i] = sc.next();
}
String[] end1 = encryptMe(encrypts);
Arrays.stream(end1).forEach(System.out::println);
}
public static String[] encryptMe(String[]encrypts){
String[] end = new String[encrypts.length];
StringBuffer sb = new StringBuffer();
for (int i = 0; i < encrypts.length; i++){
char[] t1 = encrypts[i].toCharArray();
for (int j = 0; j < t1.length;j++){
//计算偏移量
int offset1 = offset(j);
//生成字符
char value = (char) ((int)t1[j] + offset1);
if (value > 122){
value = (char) ((int)t1[j] + offset1 - 26);
}
sb.append(value);
}
end[i] = sb.toString();
sb.setLength(0);
}
return end;
}
/**
* 偏移量计算
* @param i
* @return
*/
public static int offset(int i){
if (i == 0){
return 1;
} else if (i == 1) {
return 2;
} else if (i == 2) {
return 4;
}else {
return offset(i-1) + offset(i-2) + offset(i - 3);
}
}
}