如题目的意思:"_"对应的是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;
}