L1-039 古风排版(Java)

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

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

解题思路

  1. 读入列的长度N和字符串。
  2. 将字符串分割成长度为N的多个子字符串。如果字符串长度不是N的整数倍,最后一部分的长度可能会小于N。
  3. 逐行输出这些子字符串的字符,从右到左,每个字符占一行。

计算行数的公式 int rows = (text.length() + N - 1) / N; 是为了正确地处理字符串分割成N个字符一列时的情况。这个公式确保了即使最后一列字符数不足N个,也能正确计算出所需的总行数。

  • text.length() 是字符串的总长度。
  • 我们希望每列有N个字符,因此理论上的列数是字符串长度除以N。如果字符串长度正好是N的倍数,那么这个除法就给出了准确的列数。但如果不是,我们会得到一个小于实际所需的列数。
  • 为了处理这种情况,我们在字符串长度上加上 N - 1,然后再进行除法。这个加法确保了即使在最后一列字符不足N个的情况下,我们也能得到正确的列数。
  • 例如,如果字符串长度是10,N是4,那么 10 + 4 - 1 = 1313 / 4 = 3.25,整数除法会得到3。但如果不加 N - 1,我们会得到 10 / 4 = 2.5,整数除法只会得到2,这显然是不够的,因为我们实际上需要3列来容纳所有字符。
  • 最后,整数除法 rows = ... / N 会给出所需的列数,但由于我们是按行打印,所以这个数实际上就是所需的行数。

解题过程中遇到的问题

暂无

代码

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 text = scanner.nextLine(); // 读取字符串

        // 计算需要的行数
        int rows = (text.length() + N - 1) / N;

        // 逐行打印
        for (int i = 0; i < N; i++) {
            for (int j = rows - 1; j >= 0; j--) {
                int index = j * N + i;
                if (index < text.length()) {
                    System.out.print(text.charAt(index));
                } else {
                    System.out.print(" "); // 不足的部分用空格填充
                }
            }
            System.out.println(); // 每行打印完毕后换行
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值