中國的古人寫文字,是從右向左豎向排版的。本題就請你編寫程序,把一段文字按古風排版。
輸入格式:
輸入在第一行給出一個正整數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();
}
}
}