13. 字符串加密

79 阅读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(1 ≤ n ≤ 1000),表示有 n 组[测试数据],

每组数据包含一行,原文str(只含有小写字母,0 < 长度 ≤ 50)。

输出描述

每组测试数据输出一行,[表示字符串]的密文。

用例

输入1 xy
输出ya
说明第一个字符x偏移量是1,即为y,第二个字符y偏移量是2,即为a。

c++源码

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n;
    cin >> n;
    // 初始化a数组
    vector<int> a(50);
    a[0] = 1;
    a[1] = 2;
    a[2] = 4;

    for (int i = 3; i < 50; i++) {
        a[i] = (a[i - 1] + a[i - 2] + a[i - 3]) % 26;
    }
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        // 为字符串的每一位字符添加a[i]偏移量
        for (int j = 0; j < s.length(); j++) {
            s[j] = (char) ((s[j] - (int)'a' + a[j]) % 26 + (int)'a');
        }
        cout << s << endl;
    }
    return 0;
}