NC52083. 解密
描述
小sun为了考试最近正在复习密码学,他现在遇到了一个问题:有一个由大小写字母组成的密文,要解密成明文。小sun知道怎么算,但是小sun很懒,他并不想算,所以他想让你帮他算算。
加密算法如下:
二十六个英文字母依次标号为0~25,比如A(a)为0,Z(z)为25
输入描述
第一行,两个整数第二行一个字符串,代表密文(长度不超过1000)保证
输出描述
输出一行字符串,为解密后的字符串
示例1
输入:
45 66 RmppuQuzpt
输出:
HelloWorld
Python3(3.5.2) 解法, 执行用时: 30ms, 内存消耗: 3684K, 提交时间: 2019-09-26 14:55:28
k1,k2=map(int,input().split()) string = input() tables = {} for x in range(97, 123): C = (k1 * (x - 97) + k2) % 26 tables[chr(C + 97)] = chr(x) for s in string: if not s.islower(): print(tables[s.lower()].upper(), end='') else: print(tables[s], end='')
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 612K, 提交时间: 2020-02-25 22:47:08
#include<bits/stdc++.h> using namespace std; int n; long k1,k2; int ctx[26]; string s; int main() { cin>>k1>>k2; for(int i=0;i<26;i++) ctx[(k1*i+k2)%26]=i; cin>>s; for(int i=0;i<s.size();i++) s[i]=s[i]<='Z'?ctx[s[i]-'A']+'A':ctx[s[i]-'a']+'a'; cout<<s; return 0; }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 500K, 提交时间: 2019-10-26 22:04:18
#include<bits/stdc++.h> using namespace std; int main(){ int ans[26],k1,k2;cin>>k1>>k2; string s; for(int i=0;i<26;i++)ans[(k1*i+k2)%26]=i; cin>>s; for(int i=0;i<s.length();i++) if(s[i]>='a')printf("%c",ans[s[i]-'a']+'a'); else printf("%c",ans[s[i]-'A']+'A'); }