L1-039_古风排版博客(20 分)[java][python]
2026/4/14 22:40:15 网站建设 项目流程

题目来源:PTA 团体程序设计天梯赛
题目编号:L1-039
作者:陈越
出题单位:浙江大学
分值:20 分


📋 题目描述

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。


📥 输入格式

输入在第一行给出一个正整数 N(< 100),是每一列的字符数。第二行给出一个长度不超过 1000 的非空字符串,以回车结束。


📤 输出格式

按古风格式排版给定的字符串,每列 N 个字符(除了最后一列可能不足 N 个)。


📌 输入样例

4 This is a test case

📌 输出样例

asa T st ih e tsi ce s

💡 解题思路

核心问题:把一个字符串按照"从右向左、从上到下"的古风方式排成若干列,然后按行输出。

分析步骤:

  1. 理解排版规则:古风排版是"竖向从上到下,整体从右向左"。也就是说,原字符串先按每列 N 个字符分组,然后第一列放最右边,最后一列放最左边。
  2. 确定列数:总字符数为len,每列字符数为 N,则总列数cols = ceil(len / N)
  3. 构建二维结构:把字符串按列填入一个二维数组(或模拟),第 j 列存放字符串中第j*Nj*N+N-1的字符。
  4. 按行输出(从右向左):对于第i行(i 从 0 到 N-1),依次从第cols-1列到第0列输出对应的字符。若某列不足 N 个字符,该位置用空格补齐。
  5. 注意行末不加多余空格:每行相邻字符之间无分隔符,直接拼接输出。

关键点:最后一列可能不满 N 个字符,需用空格补全,以保证按行输出时对齐。


💻 代码实现(Java)

importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();// 每列字符数sc.nextLine();// 消耗换行Strings=sc.nextLine();// 输入字符串intlen=s.length();// 计算总列数(向上取整)intcols=(len+n-1)/n;// 构建二维字符数组,不足部分用空格补全char[][]grid=newchar[n][cols];for(intj=0;j<cols;j++){for(inti=0;i<n;i++){intidx=j*n+i;if(idx<len){grid[i][j]=s.charAt(idx);}else{grid[i][j]=' ';// 不足部分补空格}}}// 按行输出,列从右向左for(inti=0;i<n;i++){StringBuildersb=newStringBuilder();for(intj=cols-1;j>=0;j--){sb.append(grid[i][j]);}System.out.println(sb.toString());}}}

🐍 代码实现(Python)

n=int(input())s=input()length=len(s)cols=(length+n-1)//n# 总列数# 构建二维结构,不足补空格grid=[]forjinrange(cols):col=[]foriinrange(n):idx=j*n+iifidx<length:col.append(s[idx])else:col.append(' ')grid.append(col)# 按行输出,列从右向左foriinrange(n):line=''forjinrange(cols-1,-1,-1):line+=grid[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(字符串长度)
字符串最大长度1000
N 最大值< 100

完全在题目限制范围内,无需担心超时或超内存。


📝 总结

本题的关键是正确理解"古风排版"的规则:

  • 填充方向:从左到右按列填入字符串(每列从上到下)
  • 输出方向:从最右列到最左列,按行打印
  • 补全处理:最后一列不足 N 个字符时,用空格补满,保证对齐

掌握了这个思路,代码实现并不复杂,注意边界处理即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询