题目链接:http://www.wechall.net/challenge/training/crypto/caesar/index.php
凯撒密码其实就是按照字母表顺序,通过将字母前移或者后移一定的距离,来对原文进行加密
可能是将原字母向右移动n位,也可能是将原字母向左移动n位
因此我们就有了下面这段代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[95];
char aa[95] = "BPM YCQKS JZWEV NWF RCUXA WDMZ BPM TIHG LWO WN KIMAIZ IVL GWCZ CVQYCM AWTCBQWV QA XOPOQLAUPNMW";
//规定向右移为正,我们先假设加密的时候是向右移动若干位
//因此我们解密的时候就是向左移动,这时候是-n
//运行完之后,如果没有找到答案,就换成+n
for(int n = 1; n<=25; n++)
{
printf("%d\n", n);
memcpy(a, aa, 95);
for(int i=0; i<94; i++)
{
if(a[i]!=' ')
{
a[i]=((a[i]-65-n)%26+26)%26+65;
}
}
for(int i=0; i<94; i++)
{
printf("%c", a[i]);
}
printf("\n");
}
return 0;
}
结果: