中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。 输出格式: 按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个) 输入样例:4 This is a test case输出样例:asa T st ih e tsi ce s题目思路: 如果题目让你向下面这样输出(为了看的更清晰,这里的*表示空格),那么你一定会做。This *is* a*te st*c ase*做这样的尝试,将题目要求的输出格式,逆时针旋转90度,不就变成下面这种情况了吗。 所以只要调整一下for循环中的行列位置,就可以很容易做题目。 需要注意的一点是,题目中规定了行数n,我们可以根据字符串的长度len和n来求出列数col 如果能整数,那么col = len / n ,如果不能整数,说明需要加一行,来存放剩下的元素 所以col = len / n + 1 为了输出时方便,我们可以将print中所有的元素设置为空格。#include <cstdio> #include <iostream> #include <cstring> using namespace std; int n; char print[101][101]; string s; int main () { memset(print, ' ', sizeof(print)); scanf("%d\n", &n); getline(cin, s); int len = s.length(); int cur = 0; int col = len / n + (len%n ? 1 : 0); for (int i = col - 1; i >= 0; i--) { for (int j = 0; j < n; j++) { if (cur == len) break; print[j][i] = s[cur++]; } if (cur == len) break; } for (int i = 0; i < n; i++) { for (int j = 0; j < col; j++) { printf("%c", print[i][j]); } printf("\n"); } return 0; }
查看原文:http://iluhao.top/archives/690
L1-039. 古风排版
最新推荐文章于 2023-12-13 16:31:43 发布