“之”型路线

题目链接

字符串“PAYPALISHIRING”的一种“之”字型路线是这样的:

 

如果一行一行的读写,就是PAHNAPLSIIGYIR。

 

请写一个函数如下:string convert(string text, int nRows);

当输入convert("PAYPALISHIRING", 3)的时候,返回的结果是PAHNAPLSIIGYIR。

 

如果你还不了解,我告诉你,这就是一个字符串的转换问题,设置成之字形的路线。

zigzag conversion也就是按"N"字母的样子来重新安排字符串中字符的位置,并合并成一个新的字符串。nRows则表示"N"的高度,也就是每一竖列有nRows个字符。

 

输入格式:第一行输入一个长度不超过250的字符串text和一个整数nRows,中间空格间隔。

输出格式:输出一行字符串,表示最终结果。

 

样例输入

ABCDEFG 4

样例输出

AGBFCED

 

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>//PAYPALISHIRING 3
 6 using namespace std;
 7 int main(){
 8     int n,k,f;
 9     string s,t[300];
10     cin >> s >> n;
11     k = -1,f = 0;
12     for(int i = 0;i < s.size();i++){
13         if(f == 0){
14             t[++k] += s[i];
15             if(k >= n - 1){
16                 f = 1;
17             }
18         }
19         else{
20             if(k <= 0){//!!注意只有一行的情况
21                 for(int j = i;j < s.size();j++){
22                     t[k] += s[j];
23                 }
24                 break;
25             }
26             else{
27                 t[--k] += s[i];
28                 if(k <= 0){
29                     f = 0;
30                 }
31             }
32         }
33     }
34     for(int i = 0;i < n;i++){
35         cout << t[i];
36     }
37     cout << endl;
38     return 0;
39 }
View Code

 

posted @ 2018-12-29 01:48  永不&言弃  阅读(301)  评论(0编辑  收藏  举报