如题目的意思:"_"对应的是0,"a"对应的是1,以此类推,"."对应的是27。给你k,ciphercode[i] = (plaincode[ki mod n] - i) mod 28. ciphercode是密文,plaincode是明文。ki为k
* i。k * i mod n为明文的第几个。n为字符串的长度
给你密文,求出明文是什么。
可以用枚举来求明文。简单暴力就可以过了。
下面的是AC的代码:
#include <iostream> #include <cstring> using namespace std; char s[28] = {'_','a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w','x','y','z','.'}; int main() { char str[80]; int k; int i, j, n, m; int p[80]; while(cin >> k) { if(k == 0) break; cin >> str; int len = strlen(str); for(i = 0; i < len; i++) { if(str[i] >= 'a' && str[i] <= 'z') n = str[i] - 96; else if(str[i] == '_') n = 0; else n = 27; m = (k * i) % len; for(j = 0; j < 28; j++) { if(((j - i) + 5 * 28) % 28 == n) { p[m] = j; break; } } } for(i = 0; i < len; i++) cout << s[p[i]]; cout << endl; } return 0; }
时间: 2024-10-29 03:05:50