7-61 古风排版 (20 分)
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
解题思路:拿到此题目,首先需要思考的是:输出格式,这个是怎么打印出来的,有什么规律。
因为从右向左打印首先:我考虑到是倒着打印出来,
如何处理字符不足的情况?
本题隐藏了一个条件,当字符不足时,用空格来补全,否则不用空格是不可能按照样例输出的。定义一个变量表示字符串下标,从0开始,当变量不小于字符串长度时,填充空格。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt(); //输入的行数
scanner.nextLine(); // 读取换行符
String s = scanner.nextLine();
char[] attr = s.toCharArray(); //装换为字符数组
int count = attr.length; //测量字符数组的长度
// 如果字符长度不是 N 的整数倍,则要增加长度,补充空格 ,需要按整数倍输出
while (count % N != 0) {
count++;
}
// 一行一行打印
for (int i = N; i > 0; i--) {
// 设置每行起始字符的索引
int begin = count - i;
// 如果起始字符索引大于字符长度,则补空格,就是我增加的数字最后面的需要补空格
while (begin >= attr.length) {
// 每列字符的索引相差N,因为一共N行
begin =begin - N;
System.out.print(" ");
}
// 开始打印有效字符,列索引 -= N 倒着打印 ,也就是隔着倍数来打印
for (int j = begin; j >= 0; j = j - N) {
System.out.print(attr[j]);
}
System.out.println();
}
}
}