字符串加密

标题:字符串加密 | 时间限制:2秒 | 内存限制:65536K | 语言限制:不限
给你一串未加密的字符串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。

def jiami():
    n = int(input().strip())
    code = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
    list = []
    panyi=[1,2,4]+[0]*48
    for i in range(3,50):
        panyi[i]=panyi[i-1]+panyi[i-2]+panyi[i-3]
    for _ in range(n):
        data = input().strip()
        list.append(data)
    for i in range(n):
        res=''
        for j in range(len(list[i])):
            f=panyi[j]%26
            res+=code[code.index(list[i][j])+f]
        print(res)

jiami()
#include <iostream>
#include <string>
using namespace std;
string cal(string s){
	long long arr[50] = { 1,2,4 };
	char str[51] = { 0 };
	for (int i = 3; i < s.size(); i++){
		arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3];
	}
	for (int i = 0; i < s.size(); ++i){
		str[i]= (s[i] + arr[i] % 26) > 'z' ? (s[i] + arr[i] % 26 - 'z' + 'a' -1 ) : (s[i] + arr[i] % 26);
	}
	string res(str);
	return res;
}
int main(){
	int cnt = 0;
	cin >> cnt;
	for (int i = 0; i < cnt; i++)
	{
		string s;
		cin >> s;
		cout << cal(s) << endl;
	}
	return 0;
}



全部评论

相关推荐

03-31 18:02
门头沟学院 Java
点赞 评论 收藏
分享
网安已死趁早转行:山东这地方有点说法
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务