L1-039. 古风排版(Java)PAT团体程序设计天梯赛-练习集

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

输入格式:

输入在第一行给出一个正整数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();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34732088/article/details/79857614