衡水哪有建网站的吗,个人简历word模板,修改wordpress登录地址,织梦wap网站模板一、算法描述及解析 要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上#xff0c;输出箱子的摆放位置#xff0c;
例如#xff1a;箱子ABCDEFG#xff0c;空地宽为3。
如输入#xff1a;
ABCDEFG 3
输出#xff1a;
AFG
BE
CD
注#xff1a;最后一行…一、算法描述及解析 要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上输出箱子的摆放位置
例如箱子ABCDEFG空地宽为3。
如输入
ABCDEFG 3
输出
AFG
BE
CD
注最后一行不得输出额外的空行
str只包含数字和数字1len(str)10001n1000。
解题思路
主要的技巧点在于处理奇数列和偶数列的时候正序和倒序的问题
1.将输入的字符串按空格分割为两部分分别为箱子的字符串和空地的宽度
2.创建一个HashMap用于存储每行的字符串Key为行的下标Value为对应的字符串
3.遍历箱子的字符串根据空地的宽度确定每个字符应该放置的行和列
计算当前字符所在的列即columnIdx i / num其中i为当前字符的索引
如果columnIdx是偶数则表示从左往右摆放行索引不变列索引为i % num
如果columnIdx是奇数则表示从右往左摆放行索引不变列索引为num - 1 - (i % num)即倒序摆放
将当前字符添加到对应行的字符串中过程推演i: 0 1 2 3 4 5 6columnIdx i / num: 0 0 0 1 1 1 2i % num: 0 1 2 0num - 1 - (i % num) 2 1 0
4.遍历HashMap map按行输出箱子的摆放位置
5.输出结果。 二、算法实现Java
public class BoxPosition {public static void main(String[] args) {Scanner sc new Scanner(System.in);String line sc.nextLine();String[] arr line.split( );// 表格的行数int num Integer.parseInt(arr[1]);// key每一行的下标value对应的字符串MapInteger, String map new HashMap();String str arr[0];for (int i 0; i str.length(); i) {int columnIdx i / num;// 行数索引int index;if (columnIdx % 2 0) {// 偶索引正序index i % num;} else {// 奇数列倒序index num - 1 - i % num;}String strFromMap map.getOrDefault(index, );String val strFromMap str.charAt(i);map.put(index, val);}for (int key : map.keySet()) {System.out.println(map.get(key));}}
}
三、运行结果