用java实现PTA古风版

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();
        }
    }
}

 

你可能感兴趣的:(java算法)