POJ2039:反反复复
来源:互联网 发布:藏剑二少捏脸数据下载 编辑:程序博客网 时间:2024/05/01 16:12
问题描述:
Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There's no place like home on a snowy night”并且有5列,Mo会写成:
t o i o yh p k n ne l e a ir a h s ge c o n hs e m o tn l e w x
注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。
Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。
你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。
第二行是一个长度不超过200的字符串。
5toioynnkpheleaigshareconhtomesnlewx
theresnoplacelikehomeonasnowynightx
代码:
#include <iostream>#include<cstring>#include<vector>using namespace std;int colum;//列数vector<string> v;void inverse(string& s){//传过来引用,对s取反 char t[50]; int j=0; for(int i=s.length()-1;i>=0;i--) t[j++]=s[i]; t[j]='\0'; s=t;//char数组和string可以相互赋值 // return t;}void code(string s){ int len=s.length(); int num=(len/colum)-1; for(int i=1;i<=num;i++){ string t=s.substr(0,colum); v.push_back(t); s=s.substr(colum); } v.push_back(s); for(int i=0;i<v.size();i++) if(i%2!=0){ string tem1=v[i];//下标为奇数的逆序 inverse(tem1); v[i]=tem1; } for(int i=0;i<colum;i++) for(int j=0;j<v.size();j++) cout<<v[j][i];//i、j不要写反 cout<<endl;}int main(){ string s; cin>>colum; cin>>s; code(s); return 0;}
0 0
- POJ2039:反反复复
- poj2039
- poj2039
- poj2039
- poj2039
- poj2039
- 反反复复
- 反反复复
- 反反复复
- 反反复复
- 反反复复反反复复反反复复
- 反反复复反反复复反反复复
- 发发反反复复反反复复反反复复反反复复h
- 反反复复反反复复飞
- 孙菲菲反反复复反反复复
- 对方反反复复反反复复吩咐
- 的反反复复福福福福福福福福福发反反复复
- 防守对方发生的反反复复反反复复反反复复反反复复反反复复反
- 【Java GUI】简单铅笔画图程序
- hdu 2544 最短路
- hdu3779
- Windows下使用VS2013编译Qt5.6源码
- Classed 类
- POJ2039:反反复复
- 0005 键盘打字如何练成像黑客一样的飞速
- return,return false,return true
- 2015年9月到2017年3月研究生回顾
- Qt5 中国象棋悔棋操作
- svn 配置多个仓库和权限控制
- jQuery
- 多态 -重写/覆盖(Override) -重载(Overload)
- 1120. Friend Numbers (20)