华为OD题目:箱子之形摆放

一、箱子之形摆放 题目描述:

要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上,输出箱子的摆放位置,例如:箱子ABCDEFG,空地宽为3,摆放效果如下图:

则输出结果为: AFG BE CD

输入:
一行字符串,通过空格分割两部分,前面str部分表示箱子的字符串由数字或字母组成,后面部分是表示宽度的数字n,如下:
ABCDEFG 3

输出:
AFG
BE
CD

注:最后一行不得输出额外的空行

str只包含数字和数字,1<=len(str)<=1000,1<=n<=1000。

解题思路:

    本题不难,主要的技巧点在于处理奇数列和偶数列的时候,正序和倒序的问题,这个要画图才能理解 比如在第一列,第0个字符A,index是0,第二列,第一个字符D,index=(n-1- i%n) = 3,具体见下面的代码 在这里插入代码片

下面是代码:

//  解题思路:
//  本题不难,主要的技巧点在于处理奇数列和偶数列的时候,正序和倒序的问题,这个要画图才能理解
public class Main {
          
   
    public static void main(String[] args) {
          
   
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        String[] strings = line.split(" ");
        int n = Integer.parseInt(strings[1]);
        //map key用来存放每一行的下标,value对应的字符串
        Map<Integer, String> map = new HashMap<>();
        String letterStr = strings[0];
        for (int i = 0; i < letterStr.length(); i++) {
          
   
            int columnIdx = i/n;
            //如果是偶数列,那么是正序,奇数列是倒序
            int index;
            if (columnIdx % 2 == 0) {
          
   
                //索引正序
                index = i % n;
            }else {
          
   
                //如果是奇数列,那么是倒序
                index = n - 1 - i % n;
            }
            String str = map.getOrDefault(index, "");
            String val = str + letterStr.charAt(i);
            map.put(index, val);

        }
        for (int key : map.keySet()) {
          
   
            System.out.println(map.get(key));
        }


    }

}
经验分享 程序员 微信小程序 职场和发展