题目描述
恺撒大帝是古罗马共和国末期著名的统帅和政治家。虽然他一生从未登上过皇位,但是直到今天在西方国家,他的名字仍是君主的代名词。他博学多才、文武双全,既是卓越的军事家又是雄辩的文学家。而恺撒密码正是这位伟大的君主发明的。话说在恺撒大帝出征时,为了避免军令落入敌军手中而泄漏军情,他自己发明了一种单字替代密码。所谓"单字替代密码"就是把明文中的每个字母用密文中的对应字母替代,明文字符集与密文字符集是 一一对应的关系。而恺撒密码就属于一种简化的单字替换密码。恺撒密码,又叫恺撒移位密码,它是将字母表中的字母依次后移一定的位置得到的,例如后移3位:
明码表: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
密码表:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
所以后移5位的时候:
明文 F O R E S T
密文 K T W J X Y
其实恺撒密码挺容易被破解...因为就那么26种...虽然这么简单,但还是有着很大的用初,现在需要你写一个程序能够对任意移位K(K大于0表示向后移位,小于0表示向前移位),下的明文进行加密。
输入
输入的第一行为小于100的正整数 n ,代表计算的数据组个数。然后是 n 组数据输入, 每一组输入包括2行, 第1行是 K 值, -26< K < 26;第2行是明文串,其长度不超过 100 个字符(包含26个大小写字符,不包含空格)。
输出
输出其密文
样例输入
2 3 itisapen 17 Helloworld样例输出
lwlvdshq Yvccfnficu#include<stdio.h> #include<string.h> struct jj { int a; char s[100]; int len; }stu[100]; int main() { int n; scanf("%d", &n); int i,j; for (i = 0; i < n; i++) { scanf("%d%s", &stu[i].a, stu[i].s); stu[i].len = strlen(stu[i].s); } for (i = 0; i < n; i++) { for (j = 0; j < stu[i].len; j++) { if (stu[i].s[j] >= 'a' && stu[i].s[j] <= 'z') { stu[i].s[j] = stu[i].s[j] + stu[i].a; if (stu[i].s[j] > 'z') { stu[i].s[j] = stu[i].s[j] - 26; } if (stu[i].s[j] < 'a') { stu[i].s[j] = stu[i].s[j] + 26; } } if (stu[i].s[j] >= 'A' && stu[i].s[j] <= 'Z') { stu[i].s[j] = stu[i].s[j] + stu[i].a; if (stu[i].s[j] > 'Z') { stu[i].s[j] = stu[i].s[j] - 26; } if (stu[i].s[j] < 'A') { stu[i].s[j] = stu[i].s[j] + 26; } } } printf("%s\n", stu[i].s); } return 0; }
SWUST OJ531:凯撒密码
最新推荐文章于 2022-01-24 09:32:21 发布