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

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

则输出结果为:
AFG
BE
CD

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

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

示例1


输入
ABCDEFG 3


输出
AFG
BE
CD


备注:
请不要在最后一行输出额外的空行
str只包含字母和数字,

示例2


输入

HELLOWORLD 4


输出

HRL
EOD
LW
LO

注:本文章,我认为题目表达的意思是这样,路线为z字,宽度n为 行高。我仅是根据我的理解来编写的代码,如有偏颇,请担待!

java代码:

package odTest;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class binZigzag {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String[] inputs = scanner.nextLine().split(" ");
		
		int wide = Integer.parseInt(inputs[1]);
		
		String[] lineArray = new String[wide];
		Arrays.fill(lineArray, "");
		
		Integer[] sortList = new Integer[wide];
		for(int j=0;j<sortList.length;j++) {
			sortList[j]=j;
		}
		int midKey = 0;
		boolean flag = true;
		for(int i=0;i<inputs[0].length();i++) {
			lineArray[sortList[midKey]] = lineArray[sortList[midKey]]+inputs[0].charAt(i);
			
			if((i+1)%wide==0&&flag) {
				Arrays.sort(sortList, Collections.reverseOrder());
				midKey = 0;
				flag = false;
				continue;
			}
			if((i+1)%wide==0&&!flag) {
				Arrays.sort(sortList);
				midKey = 0;
				flag = true;
				continue;
			}
			midKey++;
		}
		Arrays.stream(lineArray).forEach(m->{
			System.out.println(m);
		});
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值