ZOJ 1006
2015-04-09 10:23
225 查看
问题:已知加密算法公式,由密文反推出明文。
思路:
读入密文字符串,求出长度n值,同时将密文数字码转换成密文数字码,利用ciphercode[i] = cipertext [i] - 'a' + 1,特殊字符空格和“.”单独处理;
读入KEY值(即公式中k值);
根据已知加密算法公式,由密文数字码反推出明文数字码,plaincode[ (k * i ) % n ] - i) =
ciphercode[i] + i,
当 ciphercode[i] + i = 0 或者 27 (即特殊字符空格和‘.’的数字码)时,单独处理,
当 ciphercode[i] + i >=28,则将( ciphercode[i] + i ) - 28,
当 ciphercode[i] + i在0~27之内,则plaintext[ (k * i ) %
n ] =( ciphercode[i] + i ) - 1+ 'a' , 此处需要类型转换,等号右边计算的结果需要整体转换成char型。
http://www.cnblogs.com/cszlg/p/3214757.html
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int SZ = 71;
int k;
int pc[SZ];
char ct[SZ], pt[SZ];
int main()
{
while(scanf("%d", &k) && k)
{
scanf("%s", ct);
int n = strlen(ct);
for(int i = 0; ct[i] != '\0'; i++)
{
int cc;
switch(ct[i])
{
case '_':
cc = 0;
break;
case '.':
cc = 27;
break;
default:
cc = ct[i] - 'a' + 1;
}
int j = (k * i) % n;
pc[j] = cc + i;
while(pc[j] > 27)
pc[j] -= 28;
if(pc[j] == 0)
pt[j] = '_';
else if(pc[j] == 27)
pt[j] = '.';
else
pt[j] = (char)(pc[j] + 'a' - 1);
}
pt
= '\0';
printf("%s\n", pt);
}
return 0;
}
问题:已知加密算法公式,由密文反推出明文。
思路:
读入密文字符串,求出长度n值,同时将密文数字码转换成密文数字码,利用ciphercode[i] = cipertext [i] - 'a' + 1,特殊字符空格和“.”单独处理;
读入KEY值(即公式中k值);
根据已知加密算法公式,由密文数字码反推出明文数字码,plaincode[ (k * i ) % n ] - i) =
ciphercode[i] + i,
当 ciphercode[i] + i = 0 或者 27 (即特殊字符空格和‘.’的数字码)时,单独处理,
当 ciphercode[i] + i >=28,则将( ciphercode[i] + i ) - 28,
当 ciphercode[i] + i在0~27之内,则plaintext[ (k * i ) %
n ] =( ciphercode[i] + i ) - 1+ 'a' , 此处需要类型转换,等号右边计算的结果需要整体转换成char型。
http://www.cnblogs.com/cszlg/p/3214757.html
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int SZ = 71;
int k;
int pc[SZ];
char ct[SZ], pt[SZ];
int main()
{
while(scanf("%d", &k) && k)
{
scanf("%s", ct);
int n = strlen(ct);
for(int i = 0; ct[i] != '\0'; i++)
{
int cc;
switch(ct[i])
{
case '_':
cc = 0;
break;
case '.':
cc = 27;
break;
default:
cc = ct[i] - 'a' + 1;
}
int j = (k * i) % n;
pc[j] = cc + i;
while(pc[j] > 27)
pc[j] -= 28;
if(pc[j] == 0)
pt[j] = '_';
else if(pc[j] == 27)
pt[j] = '.';
else
pt[j] = (char)(pc[j] + 'a' - 1);
}
pt
= '\0';
printf("%s\n", pt);
}
return 0;
}
相关文章推荐
- zoj 1006 Do the Untwist
- 九度OJ 1006:ZOJ问题 (递归)
- zoj 1006
- ZOJ 1006
- 题目1006:ZOJ问题
- 题目1006:ZOJ问题
- ZOJ-1006-Do the Untwist
- 九度1006 ZOJ问题 浙大考研机试题
- 题目1006:ZOJ问题
- zoj 1006
- 1006 zoj
- 题目1006:ZOJ问题
- ZOJ Problem Set - 1006
- 九度 题目1006:ZOJ问题
- ZOJ 1006 Do the untwist T^T
- ZOJ-1006
- 九度1006:ZOJ问题
- ZOJ1006 Do the Untwist
- 题目1006:ZOJ问题
- 九度OJ 1006 ZOJ问题