vs做网站开发,成品影视app开发与制作,免费免备案域名,萧江网站建设目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入#xff1a;4 8 7 5 2 3 6 4 8 12、输出#xff1a;23、说明#xff1a;4、思路分析 华为OD机试 2023B卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《… 目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入4 8 7 5 2 3 6 4 8 12、输出23、说明4、思路分析 华为OD机试 2023B卷题库疯狂收录中刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题A卷B卷》。
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
一个正整数数组 设为nums最大为100个成员求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。
要求
第一步 必须从第一元素起 且 1第一步步长len/2 (len为数组长度)从第二步开始只能以所在成员的数字走相应的步数不能多不能少 如果目标不可达返回-1 只输出最小的步骤数量只能向数组的尾部走不能向回走。
二、输入描述
有正整数数组空格分割数组长度100。
三、输出描述
正整数 最小步数不存在输出-1。
四、解题思路
题目要求计算从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。
步骤要求如下
第一步必须从第一个元素起步长范围为 [1, len/2)其中 len 为数组长度从第二步开始只能以当前成员的数字作为步数走不能多也不能少目标不可达时返回 -1只输出最小的步骤数量只能向数组的尾部走不能向回走。
具体解题思路如下
读取输入的正整数数组初始化数组长度为 len转换为整型数组 arr初始化最小步数 minCount 为 0从第一步开始遍历步长从 1 到 len/2 的各种情况 设置步数 count 为 1位置 index 为当前步长从第二步开始根据当前位置的数字进行走步操作直到走出数组范围或者到达最后一个成员如果走的长度超出了范围则说明这种情况不符合要求退出循环如果刚好走到最后一个成员更新最小步数 minCount。 根据最小步数 minCount 的值输出结果如果为 0 则输出 -1否则输出 minCount。
五、Java算法源码
public static void main(String[] args) {Scanner scanner new Scanner(System.in);String[] nums scanner.nextLine().split( );int len nums.length;int[] arr new int[len];for (int i 0; i len; i) {arr[i] Integer.parseInt(nums[i]);}int minCount 0;// 第1步最多只能走 len/2遍历各种情况for (int i 1; i len / 2; i) {// 走出第一步后的步数和位置int count 1;int index i;// 从第2步开始只能以所在成员的数字走相应的步数while (true) {// 再走一步index arr[index];// 步数加1count;if (index len - 1) {// 当走的长度超出了范围说明这种情况不符合要求break;} else if (index len - 1) {// 刚好走到最后一个成员更新最小步数if (minCount 0) {minCount count;} else {minCount Math.min(minCount, count);}break;}}}if (minCount 0) {System.out.println(-1);} else {System.out.println(minCount);}
}六、效果展示
1、输入4 8 7 5 2 3 6 4 8 1
2、输出2
3、说明
第一个可选步长选择2从第一个成员4开始走两步到7第二步从7经过7个成员到最后。
4、思路分析
1第一步步长len/2 (len为数组长度)需要遍历第一步的各种可能从第二步开始只能以所在成员的数字走相应的步数不能多不能少只能向数组的尾部走不能向回走 下一篇华为OD机试 - 荒岛求生 - 栈StackJava 2023 B卷 100分
本文收录于华为OD机试JAVA真题A卷B卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。