华为OD机试真题 Java 实现 [箱子之形摆放]

题目

有一批箱子(形式为字符串,设为 str),
要求将这批箱子按从上到下以字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。
例如:箱子 ABCDEFG,空地宽度为 3,摆放结果如图:

Snipaste_2023-02-06_12-06-09

则输出结果为:
AFG
BE
CD

输入

输入一行字符串,通过空格分隔,前面部分为字母或数字组成的字符串 str,表示箱子;
后面部分为数字 n,表示空地的宽度。例如: ABCDEFG 3

输出

箱子摆放结果,如题目示例所示
A F G
B E
C D

示例

输入

ABCDEFG 3

输出

AFG
BE
CD

备注

  1. 请不要在最后一行输出额外的空行
  2. str只包含字母和数字,

思路

创建一个二维字符数组来存放箱子,在遍历时,根据当前的行数和列数的奇偶性来决定是从左到右还是从右到左放置箱子。如果当前行数是偶数,则从左到右放置箱子;否则,从右到左放置箱子。

代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next(); // 输入箱子字符串
        int n = sc.nextInt(); // 输入空地宽度

        int len = str.length();
        int row = len / n; // 箱子应该放置的行数
        if (len % n != 0) {
            row++; // 如果有余数,行数加1
        }

        char[][] box = new char[row][n]; // 定义二维数组来存放箱子

        int index = 0;
        for (int i = 0; i < row; i++) {
            if (i % 2 == 0) { // 从上到下,从左到右放置箱子
                for (int j = 0; j < n && index < len; j++) {
                    box[i][j] = str.charAt(index++);
                }
            } else { // 从上到下,从右到左放置箱子
                for (int j = n - 1; j >= 0 && index < len; j--) {
                    box[i][j] = str.charAt(index++);
                }
            }
        }

        // 输出结果
        StringBuilder sb = new StringBuilder();
        for (int j = 0; j < n; j++) {
            for (int i = 0; i < row; i++) {
                if (box[i][j] != '\0') {
                    sb.append(box[i][j]);
                }
            }
            if (j != n - 1) { // 不是最后一列,加上换行符
                sb.append('\n');
            }
        }
        System.out.print(sb.toString());
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值