NC214456. 密码破译
描述
输入描述
第一行有一个正整数,表示有T组数据。
每组数据的第一行有一个字符串,表示最终密文,保证字符串$s$全部由小写字母组成。
每组数据的第二行有一个数字,表示恺撒加密的偏移量。
输出描述
对于每组数据,输出加密前的明文。
示例1
输入:
2 ixfpmsmmpe 1 ijqcqxfgnhwwepm 2
输出:
helloworld goodluckhavefun
C(clang11) 解法, 执行用时: 3ms, 内存消耗: 372K, 提交时间: 2020-12-06 20:57:06
#include <string.h> #include <stdio.h> int main(){ int t; scanf("%d",&t); while(t--) { char ch[1000]; int k,l,i; scanf("%s%d",ch,&k); l=strlen(ch); for(int i=0;i<l;i++) { int num=ch[i]-'a'; num=(num-k+26)%26; ch[i]=num+'a'; } for(int i=0;i<l;i+=2) printf("%c",ch[i]); for(int i=1;i<l;i+=2) printf("%c",ch[i]); printf("\n"); } return 0; }
C++(clang++11) 解法, 执行用时: 6ms, 内存消耗: 632K, 提交时间: 2020-12-07 22:59:56
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; while(n--){ string str, s1 = "", s2 = ""; int k; cin >> str >> k; for(int i = 0; i < str.length(); i++){ str[i]=(26+str[i]-'a'-k)%26+'a'; if(i & 1) s2 += str[i] ; else s1 += str[i]; } s1 += s2; cout << s1 << endl; } return 0; }