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();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章