浙江大学ZOJ 1006题 解题报告
来源:互联网 发布:狼群算法matlab 编辑:程序博客网 时间:2024/05/17 22:08
1006题,这道题其实整体来说不难,要说难得话确实翻译比较困难(可能是我的英语确实不好),不过只要懂了具体的那些关键词就可以很容易的理解。
整体意思大概是说,加密和解密的过程(按照题目中的意思),整个题意就是说给了一个中间值k和一个字符串是ciphertext(加密后的字符串),然后你需要根据题目中给出的对应关系(‘’= 0,‘a’=1,‘b’=2,……,‘z’=26,‘.’=27)得出ciphertext对应的ciphercode(加密字符串对应的数字串),然后通过给的公式ciphercode[i] = (plaincode[ki mod n] - i) mod 28,n代表的是密码串的长度。进行一些变换换成plaincode[(i*k)%ciphertext.size()] =((ciphercode[i]+i)%28);然后通过这个公式能算出每一位的plaincode(密码对应的原文的数字串)。然后在通过题目给出的对应关系(‘’= 0,‘a’=1,‘b’=2,……,‘z’=26,‘.’=27)得出plaintext,
然后把plaintext输出一下就行了。然后上代码
#include<iostream>#include<string>using namespace std;int main(){ int ciphercode[1000],plaincode[1000]; string ciphertext; char plaintext[1000]; int k; while(cin>>k) { if(k==0) { break; } cin>>ciphertext; for(int i=0;i<ciphertext.size();i++) { if(ciphertext[i]=='.') { ciphercode[i]=27; } else if(ciphertext[i]=='_') { ciphercode[i]=0; } else { ciphercode[i]=ciphertext[i]-'a'+1; } } for(int i=0;i<ciphertext.size();i++) { plaincode[(i*k)%ciphertext.size()] = ((ciphercode[i]+i)%28); } for(int i=0;i<ciphertext.size();i++) { if(plaincode[i]==27) { plaintext[i]='.'; } else if(plaincode[i]==0) { plaintext[i]='_'; } else { plaintext[i] = plaincode[i]+'a'-1; } } for(int i=0;i<ciphertext.size();i++) { cout<<plaintext[i]; } cout<<endl; }}
完事~
0 0
- 浙江大学ZOJ 1006题 解题报告
- 浙江大学ZOJ 1005题 解题报告
- 浙江大学2011年复试上机题 解题报告
- 浙江大学2010年复试上机题 解题报告
- 浙江大学2007年复试上机题 解题报告
- 浙江大学2006年复试上机题 解题报告
- 浙江大学2005年复试上机题 解题报告
- zoj 1005 解题报告
- zoj 1027解题报告
- zoj 1108解题报告
- [解题报告]ZOJ 1001
- zoj 3212 解题报告
- zoj 1312解题报告
- ZOJ 1115 解题报告
- zoj 1002解题报告
- ZOJ 1610 解题报告
- ZOJ-1796解题报告
- ZOJ 3201解题报告
- makefile详解
- pid_t的类型定义
- Oracle中Lpad函数和Rpad函数的用法
- 数字三角形问题
- 如何除去Visual Studio 2015最下面的蓝色状态栏
- 浙江大学ZOJ 1006题 解题报告
- 数据结构 串的算法
- Linux安装MySQL的两种方法
- 统计单词数(水题)
- [Leetcode] Valid Anagram
- 2016.12 第九次CCF 总结
- Combination Sum II
- 二叉树后续非递归遍历-lintcode
- Android 5.0新特性之ToolBar