题目描述:给出原文字符串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]。
输入描述:第一行是整数n,表示n组测试数据。每组数据包含一行,原文str(只含有小写字母,长度大于0小于50)。
输出描述:每组测试数据输出一行,表示密文。
例如:
原文abcde
加密后bdgkr,其中偏移量分别是1,2,4,7,13。
原文xy
加密ya,其中偏移量分别是1,2
思路
JScript代码
let line = readline();
let str = line.split("");
let n = str.length;
let arr = [];
let res = [];
for (let i = 0; i < n; i++) {
//对偏移量进行初始化
if (i == 0) {
arr[i] = 1;
} else if (i == 1) {
arr[i] = 2;
} else if (i == 2) {
arr[i] = 4;
} else {
arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3];
}
}
let sample = str.join("");
for (let i = 0; i < n; i++) {
// 判断字符ascii码+偏移量是否超出a-z;超出分别处理,即用(该字符的ascii码加偏移量减去a的ascii码97)再除26取余加上97
if (
sample.charCodeAt(i) + arr[i] >= 97 &&
sample.charCodeAt(i) + arr[i] <= 122
) {
res.push(String.fromCharCode(sample.charCodeAt(i) + arr[i]));
} else {
res.push(
String.fromCharCode(97 + ((sample.charCodeAt(i) + arr[i] - 97) % 26))
);
}
}
console.log(res.join(""));
// console.log(arr);//验证偏移数组
参考:字符串加密