天梯赛 L1-039 古风排版 (20 分)
题目
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入
输入在第一行给出一个正整数 N ( < 100 ) N(<100) N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列 N N N个字符(除了最后一列可能不足 N N N个)。
测试样例
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
简单分析:
- 就是一个简单的二重循环,4.22更新了代码,使得变量名命名更加规范
- 或者寻找数学关系(见参考链接)
代码:
#include <iostream>
#include <string>
#define N 110
using namespace std;
char ch[N][N];
int main() {
int row;
cin >> row;
string str;
getchar();
getline(cin, str);
int col = 0, len = str.size();
if (len % row) {
len /= row;
len ++;
col = len;
}
else col = len / row;
for (int i = col, k = 0; i >= 1; i --)
for (int j = 1; j <= row; j ++) {
if (k < str.size()) ch[j][i] = str[k++];
else ch[j][i] = ' ';
}
for (int i = 1;i <= row; i ++) {
for (int j = 1; j <= col; j ++)
cout << ch[i][j];
cout << endl;
}
return 0;
}
感悟
变量命名不好真的时给自己找麻烦,稍不留神写错了一个调试半天,coding和debug能力都要训练!
getline()之前一定要注意是否需要getchar()!!!
把变量写错了难以检查,要规范命名方式!