您的位置:首页 > 其它

杭电ACM1129——Do the Untwist~~解密 密文

2015-06-17 17:55 375 查看
如题目的意思:"_"对应的是0,"a"对应的是1,以此类推,"."对应的是27。给你k,ciphercode[i] = (plaincode[ki mod n] - i) mod 28. [b]ciphercode是密文,[b]plaincode是明文。ki为k
* i。k * i mod n为明文的第几个。n为字符串的长度
[/b][/b]

给你密文,求出明文是什么。

可以用枚举来求明文。简单暴力就可以过了。

下面的是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: