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
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);}}
}