百练1041-反反复复-2016正式C题
C:反反复复
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There's no place like home on a snowy night”并且有5列,Mo会写成:
t o i o y
h p k n n
e l e a i
r a h s g
e c o n h
s e m o t
n l e w x注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。
Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。
你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。
- 输入
- 第一行包含一个整数(范围2到20),表示使用的列数。
第二行是一个长度不超过200的字符串。 - 输出
- 一行,即原始信息。
- 样例输入
-
5 toioynnkpheleaigshareconhtomesnlewx
- 样例输出
-
theresnoplacelikehomeonasnowynightx
- 来源
- East Central North America 2004
-
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <ctype.h> 5 6 using namespace std; 7 8 int main() { 9 int co; //lie shu 10 scanf("%d", &co); 11 12 // cout << co << endl; 13 getchar(); 14 15 char aaa[205]; 16 gets(aaa); 17 // cout <<" here " << endl; 18 19 string bbb = aaa; 20 int l = bbb.size(); 21 22 int row = l / co; //hang shu 23 char ma[row][co]; 24 int k = 0; 25 26 for(int i = 0; i < row; i++) { 27 if(i % 2 == 0) { 28 for(int j = 0; j < co; j++) { 29 ma[i][j] = bbb[k]; 30 k++; 31 //cout << ma[i][j]; 32 } 33 } 34 else{ 35 for(int j = co -1; j >= 0; j--) { 36 ma[i][j] = bbb[k]; 37 k++; 38 } 39 } 40 } 41 42 /* 43 //show 44 for(int i = 0; i < row; i++) { 45 for(int j = 0; j < co; j++) { 46 cout << ma[i][j] << " "; 47 } 48 cout << endl; 49 } 50 */ 51 52 53 for(int i = 0; i < co; i++) { 54 for(int j = 0; j < row; j++) { 55 cout << ma[j][i]; 56 } 57 } 58 59 return 0; 60 61 }
提交网址:http://bailian.openjudge.cn/practice/2039/
网上的方法有些繁琐,这里给了一个简单的