7-18 古风排版(java)

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

输入格式:

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

输出格式:

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

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();  // 行数(每列字符数)
        sc.nextLine();
        String input = sc.nextLine();
        int C = input.length();
        int M = (C + N - 1) / N;  // 计算需要的列数(向上取整)

        // 计算需要补充的空格数
        int total = N * M;
        int buQi = total - C;

        // 用空格补齐字符串
        StringBuilder sb = new StringBuilder(input);
        for(int i = 0; i < buQi; i++) {
            sb.append(' ');
        }
        String zifu = sb.toString();

        char[][] zifu2 = new char[N][M];

        // 按列填充(从左到右)
        for(int i = 0; i < total; i++) {
            int row = i % N;
            int col = i / N;
            zifu2[row][col] = zifu.charAt(i);
        }

        // 从右到左输出每一列
        for(int i = 0; i < N; i++) {
            for(int j = M - 1; j >= 0; j--) {
                System.out.print(zifu2[i][j]);
            }
            System.out.println();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值