题目链接:http://poj.org/problem?id=2039
解释下题意,一个简单的字符串加密解密实现,给出了算法,让你实现,这里是给出一个数字和加密的字符串让你解密。
解释下加密算法,将字符串写成一个矩阵,依次由上到下,由左到又,加密后的字符串就是横着读的结果,单数行正着读,双数行反着读。这里搞懂了就不难了,这样的题难在矩阵参数的判断。
前面我也纠结了好久那个矩阵的排布,这里我建议先用笔在纸上,先花好理解好其关系,在来解题不急。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
#include <iostream> #include <cstdio> #include <string.h> using namespace std;
int main() { int n,m; char data[205][25],str[205]; while(cin>>n) { if(n==0) break; cin>>str; int l=strlen(str); m=l/n; for(int i=0;i<l;i++) { if((i/n)%2==0) data[i/n][i%n]=str[i]; else data[i/n][n-1-i%n]=str[i]; } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cout<<data[j][i]; } cout<<endl; } }
|