Skip to content

14068: 【原4068】Z字形输出

题目

题目描述

author: 程序设计思想与方法助教组黄海鑫 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4068

问题描述

输入一个字符串以及Z字形的行数,将它按照z字形重排后输出。例如:

当输入为: 
3 acm.sjtu.edu.cn
将输入按照3行的Z字形排列:
a   s   .   .
c . j u e u c 
m   t   d   n
将它按行输出:
as..c.jueucmtdn
当输入为:
4 acm.sjtu.edu.cn
将输入按照4行的Z字形排列:
a     t     .
c   j u   u c
m s   . d   n
.     e
将它按行输出:
at.cjuucms.dn.e

输入输出描述

输入

  • 输入为一个正整数n(代表Z字形的行数),以及需要重排的字符串,字符串长度不超过100

输出

  • 输出为一行,即按照Z字形重排后的字符串

程序运行示例1

Sample Input 1

2 acm.sjtu.edu.cn

Sample Output 1

amst.d.nc.jueuc

程序运行示例2

Sample Input 2

5 acm.sjtu.edu.cn

Sample Output 2

a.cuemtdn.jucs.

注意

  • 不要显示多余的提示信息,避免输出判定错误
  • 注意判断输出信息是否符合要求。

LuminousXLB's solution

// 4068. Z字形输出
// #464350 正确 / 分数100 / 时间7ms / 内存10684kb
#include <iostream>

using namespace std;

int main(int argc, char const *argv[]) {
    int n;
    cin >> n;
    int step = 2*(n - 1);

    cin.get();

    char str[32];
    int len = 0;
    cin >> str;
    while(str[len]) len++;

    if (n == 1) {
        cout << str;
    } else {
        for (int i = 0; i < n; i++) {
            if (i == 0 || i == n - 1) {
                for (int k = i; k < len; k += step) {
                    cout << str[k];
                }
            } else {
                int substep = 2*(n - i - 1);
                for (int k = i; k < len; k+=step) {
                    cout << str[k];
                    if (k + substep < len) {
                        cout << str[k + substep];
                    }
                }
            }
        }
    }
    return 0;
}