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;
}