Vigenère 密码
略简单的字符串+模拟。
原题链接:https://www.luogu.org/problem/show?pid=1079#sub
如果你对那个图感到懵逼,那属于正常,但没关系,这个图其实作用不大,我们需要的是找到字符串的规律。
可以发现,每一个字母都代表一个数字,从a到z分别代表0到25,而明文和密文的转换是通过一个减法,用密钥减去这个代表数字,得到一个数,这个数对应的ascii字符即为明文。
有几个细节问题。一个是密钥不够长的问题,这里需要一个预判,如果密钥不够长就把它补长。第二个就是大小写问题,这个好办,判断时大小写都判断就好。
以为这样就完了?并不。。。这样有可能会出现减过头的情况,需要加回来,加一个26就好。
附代码:
#include <cstdio>
#include <cstring>
#define maxn 1005
char k[maxn],c[maxn],m[maxn];
int lena,lenb;
int main(){
gets(k);
gets(c);
lena = strlen(k);
lenb = strlen(c);
if (lena < lenb)
for (int i=lena;i<lenb;i++)
k[i] = k[i-lena];
int t;
for (int i=;i<lenb;i++){
if (k[i]>='A' && k[i]<='Z')
t = k[i]-'A';
if (k[i]>='a' && k[i]<='z')
t = k[i]-'a';
m[i] = c[i] - t;
if (c[i]>='A' && c[i]<='Z' && m[i]<'A')
m[i]+=;
if (c[i]>='a' && c[i]<='z' && m[i]<'a')
m[i]+=;
}
for (int i=;i<lenb;i++)
printf("%c",m[i]);
return ;
}
Vigenère 密码的更多相关文章
- Vigenère密码
来源 NOIP2012复赛 提高组 第一题 描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用 ...
- [NOIP2012] 提高组 洛谷P1079 Vigenère 密码
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- NOIp 2012 #1 Vigenère 密码 Label:模拟
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- Vigenère 密码(luogu 1079)
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- Vigenère 密码NOIP 2012 提高组 第一天 第一题
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- NOIP2012 Vigenère 密码
1.Vigenère 密码 (vigenere.cpp/c/pas) [问题描述] 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密码.V ...
- [字符串][NOIP2012]Vigenère密码
Vigenère密码 题目描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高, ...
- 08:Vigenère密码
08:Vigenère密码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法— ...
- 80.Vigenère密码(模拟)
Vigenère密码(文件名vigenere.cpp vigenere.in vigenere.out) 题目描述 Description 16 世纪法国外交家Blaise de Vigen ...
- 洛谷 P1079 Vigenère 密码
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
随机推荐
- TypeScript笔记 3--基础类型
强类型是TypeScript值得称赞的特性,对于很多后端开发者来说是绝对的福利,加上静态检查使得我们可以在开发态就可以发现很多问题. TypeScript中的类型和JavaScript差不多,下面我们 ...
- Redis Cluster集群搭建与应用
1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...
- 两种方法上传本地文件到github
https://www.jianshu.com/p/c70ca3a02087 自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败.最重要的 ...
- SQLite 链接大全
http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html
- J.U.C ThreadPoolExecutor解析
Java里面线程池顶级接口是Executor,但严格意义上讲Executor并不是一个线程池,而是一个线程执行工具,真正的线程池接口是ExecutorService.关系类图如下: 首先Executo ...
- JVM内存划分简介
参考:深入理解JAVA虚拟机(第二版)
- 关于富文本在Android中的应用以及遇到的坑
富文本可以为用户提供更加多样化的文本展示形式,但由于其使用了H5标签的特殊性,一般都需要第三方框架的支持.这里推荐一款合适的第三方富文本框架,richeditor. 首先我们要使用该功能需要引入相关j ...
- 006-接收键盘的输入(read)
read -ptns 变量名 -p 在等待read输入的时候,显示的提示信息 -t 秒数,read等待用户输入的时间 -n read接收用户输入的字符数,只接收指定字符数,就会执行 -s 隐藏输 ...
- error: stray '\357' in program编程出错的总结
错误: 编译报错:error: stray '\357' in program 原因:在程序中打入了全角字符 具体分析产生原因: 在编程中,由于打字的快速,按下ctrl键后紧接着按下了space键 ...
- Python使用requests模块访问HTTPS网站报错`certificate verify failed`
使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...