中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)
输入样例:
4
This is a test case
输出样例:
a s a T
s t i h
e t s i
c e s
说下思路:
1 因为题目要求按列从右到左依次输出,如果给定字符串的长度不是N的整数倍,后面若干行肯定会先打印空格,再打印有效字母。
2 所以我先定义一个长度 len,初始为给定字符串的长度。如果这个长度不是N的整数倍,就把长度增加,直到是N的整数倍。
3 到这里,就得到了一个长度是N的整数倍的 len,就可以开始打印字符了。设 i = N,共打印N行。首先是第一行,,第一行起始字符的下标应该就是 len - i,然后第一行的第二个字符的下标应该是 len - i - N,第一行第三个字符下标是 len - i - N - N,直到减到 0。
4 将第3步中的过程提取成两个循环,外层循环控制行打印,内层循环控制列打印。如果该行的起始字符的下标大于给定字符串的长度,就表示要打印填充的空格。
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 str = scanner.nextLine();
char[] data = str.toCharArray();
int len = data.length;
// 如果字符长度不是 N 的整数倍,则要增加长度,补充空格
while (len % N != 0) {
len++;
}
// 一行一行打印
for (int i = N; i > 0; i--) {
// 设置每行起始字符的索引
int begin = len - i;
// 如果起始字符索引大于字符长度,则补空格
while (begin >= data.length) {
// 每列字符的索引相差N,因为一共N行
begin -= N;
System.out.print(" ");
}
// 开始打印有效字符,列索引 -= N
for (int j = begin; j >= 0; j -= N) {
System.out.print(data[j]);
}
System.out.println();
}
}
}