L1-039_古风排版博客(20 分)[java][python]

张开发
2026/4/16 5:12:14 15 分钟阅读

分享文章

L1-039_古风排版博客(20 分)[java][python]
题目来源PTA 团体程序设计天梯赛题目编号L1-039作者陈越出题单位浙江大学分值20 分 题目描述中国的古人写文字是从右向左竖向排版的。本题就请你编写程序把一段文字按古风排版。 输入格式输入在第一行给出一个正整数 N 100是每一列的字符数。第二行给出一个长度不超过 1000 的非空字符串以回车结束。 输出格式按古风格式排版给定的字符串每列 N 个字符除了最后一列可能不足 N 个。 输入样例4 This is a test case 输出样例asa T st ih e tsi ce s 解题思路核心问题把一个字符串按照从右向左、从上到下的古风方式排成若干列然后按行输出。分析步骤理解排版规则古风排版是竖向从上到下整体从右向左。也就是说原字符串先按每列 N 个字符分组然后第一列放最右边最后一列放最左边。确定列数总字符数为len每列字符数为 N则总列数cols ceil(len / N)。构建二维结构把字符串按列填入一个二维数组或模拟第 j 列存放字符串中第j*N到j*NN-1的字符。按行输出从右向左对于第i行i 从 0 到 N-1依次从第cols-1列到第0列输出对应的字符。若某列不足 N 个字符该位置用空格补齐。注意行末不加多余空格每行相邻字符之间无分隔符直接拼接输出。关键点最后一列可能不满 N 个字符需用空格补全以保证按行输出时对齐。 代码实现Javaimportjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intnsc.nextInt();// 每列字符数sc.nextLine();// 消耗换行Stringssc.nextLine();// 输入字符串intlens.length();// 计算总列数向上取整intcols(lenn-1)/n;// 构建二维字符数组不足部分用空格补全char[][]gridnewchar[n][cols];for(intj0;jcols;j){for(inti0;in;i){intidxj*ni;if(idxlen){grid[i][j]s.charAt(idx);}else{grid[i][j] ;// 不足部分补空格}}}// 按行输出列从右向左for(inti0;in;i){StringBuildersbnewStringBuilder();for(intjcols-1;j0;j--){sb.append(grid[i][j]);}System.out.println(sb.toString());}}} 代码实现Pythonnint(input())sinput()lengthlen(s)cols(lengthn-1)//n# 总列数# 构建二维结构不足补空格grid[]forjinrange(cols):col[]foriinrange(n):idxj*niifidxlength:col.append(s[idx])else:col.append( )grid.append(col)# 按行输出列从右向左foriinrange(n):lineforjinrange(cols-1,-1,-1):linegrid[j][i]print(line)✅ 运行验证输入4 This is a test case手动模拟字符串This is a test case共19个字符每列4个字符列号字符从上到下列0最右T, h, i, s列1’ , i, s, ’ ’列2a, ’ , t, e列3s, t, ’ , c列4最左a, s, e, 空格补全按行从右列→左列输出共4行第0行a s a ’ ’ T asa T第1行s t ’ ’ i h st ih第2行e ’ ’ t s i e tsi第3行(空格) c e ’ ’ s ce s输出asa T st ih e tsi ce s✅ 与预期结果完全一致 复杂度分析项目值时间复杂度O(N × cols) O(字符串长度)空间复杂度O(N × cols) O(字符串长度)字符串最大长度1000N 最大值 100完全在题目限制范围内无需担心超时或超内存。 总结本题的关键是正确理解古风排版的规则填充方向从左到右按列填入字符串每列从上到下输出方向从最右列到最左列按行打印补全处理最后一列不足 N 个字符时用空格补满保证对齐掌握了这个思路代码实现并不复杂注意边界处理即可。

更多文章