中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
解题思路:
我们先算出每行的字符数,然后创建一个二维字符数组,按照题目顺序用所得的字符串填充这个字符数组。
注意事项:
1.双重for循环要弄清楚,是从第一行最后一列开始按照行数递增去填充
2.注意字符串是否填充完,如果填充完要在字符数组后填充' '空格符号,否则遍历打印的时候遍历到'\0'的空字符就会停止打印,会造成某行缺少的情况。
代码实现:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m;
string s;
cin >> n;
getchar();
getline(cin, s);
m = (s.size() / n);
while ((m * n) < s.size()) {
m++;
}
char c[n][m];
int count = 0;
for (int i = m - 1; i >= 0; --i) {
for (int j = 0; j < n; ++j) {
if (count < s.size()) {
c[j][i] = s[count++];
} else {
c[j][i] = ' ';
}
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cout << c[i][j];
}
cout << endl;
}
}