ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

8.23华为OD机试真题 新系统 - 直线冲刺 (Java/Py/C/C++/Js/Go)

8.23华为OD机试真题 新系统 - 直线冲刺 (Java/Py/C/C++/Js/Go) 直线冲刺2026 华为OD机试真题8月23日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述在一条长度为 n 的直线跑道上每个格子的坐标从 0 到 n−1每个格子上写着一个整数存放在数组 tiles 中。这些数字有特殊含义tiles[i]0代表这是普通空地可以通过tiles[i]1代表这是弹簧加速垫tiles[i]-1代表这是陷阱。你控制的角色从坐标 0 出发目标是成功到达或越过终点坐标 n−1即坐标 n-1即算通关。角色移动规则默认情况下角色每一步只能向右移动 1 格。如果角色踩到弹簧加速垫1那么下一步可以向右移动 2 格。如果角色踩到陷阱-1游戏结束。输入描述给定一个整数数组tiles长度为 n其中1 n 10000。数组中的元素取值为0、1或-1。输入为一行数组元素使用英文逗号分隔例如0,1,-1,0,0输出描述如果角色从坐标 0 出发能够成功通关到达或越过坐标 n−1返回通关所需的步数否则返回-1。示例1输入0,1,-1,0,0输出3说明初始在坐标 0当前格子是 0普通空地。第 1 步移动 1 格来到坐标 1当前格子是 1弹簧垫。第 2 步因为踩到弹簧这步移动 2 格来到坐标 3成功越过了坐标 2 的陷阱当前格子是 0。第 3 步移动 1 格来到坐标 4检查到达了坐标 4等于 n−1成功通关。示例2输入1,0,-1,0输出-1说明执行过程初始在坐标 0当前格子是 1弹簧垫。第 1 步移动 2 格来到坐标 2当前格子是 −1陷阱游戏结束。解题思路核心思想题目中的移动规则是确定的当前位置是弹簧就走 2 格否则走 1 格。不存在分支选择因此只需要从起点开始按规则模拟。每次移动前先判断若当前位置已经到达或越过终点返回当前步数若当前位置是陷阱返回-1否则按格子类型移动并累加步数。算法步骤初始化当前位置pos0步数steps0。若pos n-1说明已经通关返回steps。若tiles[pos] -1说明踩到陷阱返回-1。若tiles[pos] 1向右移动 2 格否则向右移动 1 格。步数加 1继续循环。复杂度分析时间复杂度O(n)位置最多向右经过 n 个格子。空间复杂度O(1)。Javaimportjava.util.*;publicclassMain{publicstaticintsolve(int[]tiles){intntiles.length;intpos0;intsteps0;while(true){if(posn-1){// 到达或越过终点返回当前步数returnsteps;}if(tiles[pos]-1){// 落到陷阱无法通关return-1;}postiles[pos]1?2:1;steps;}}publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);String[]partsscanner.nextLine().trim().split(,);int[]tilesnewint[parts.length];for(inti0;iparts.length;i){tiles[i]Integer.parseInt(parts[i].trim());}System.out.println(solve(tiles));}}Pythondefsolve(tiles):nlen(tiles)pos0steps0whileTrue:ifposn-1:# 已到达或越过终点returnstepsiftiles[pos]-1:# 踩到陷阱通关失败return-1pos2iftiles[pos]1else1steps1tileslist(map(int,input().strip().split(,)))print(solve(tiles))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});rl.on(line,line{consttilesline.trim().split(,).map(Number);console.log(solve(tiles));rl.close();});functionsolve(tiles){constntiles.length;letpos0;letsteps0;while(true){if(posn-1){// 到达或越过终点即通关returnsteps;}if(tiles[pos]-1){// 当前位置是陷阱直接失败return-1;}postiles[pos]1?2:1;steps;}}C#includebits/stdc.husingnamespacestd;intsolve(constvectorinttiles){intntiles.size();intpos0;intsteps0;while(true){if(posn-1){// 已经到达或越过终点returnsteps;}if(tiles[pos]-1){// 踩到陷阱失败return-1;}postiles[pos]1?2:1;steps;}}intmain(){string line;getline(cin,line);vectorinttiles;string item;stringstreamss(line);while(getline(ss,item,,)){tiles.push_back(stoi(item));}coutsolve(tiles)endl;return0;}Gopackagemainimport(bufiofmtosstrconvstrings)funcsolve(tiles[]int)int{n:len(tiles)pos:0steps:0for{ifposn-1{// 到达或越过终点返回步数returnsteps}iftiles[pos]-1{// 踩到陷阱无法通关return-1}iftiles[pos]1{pos2}else{pos}steps}}funcmain(){reader:bufio.NewReader(os.Stdin)line,_:reader.ReadString(\n)parts:strings.Split(strings.TrimSpace(line),,)tiles:make([]int,len(parts))fori,part:rangeparts{tiles[i],_strconv.Atoi(strings.TrimSpace(part))}fmt.Println(solve(tiles))}C语言#includestdio.h#includestdlib.h#includestring.hintsolve(inttiles[],intn){intpos0;intsteps0;while(1){if(posn-1){// 到达或越过终点成功通关returnsteps;}if(tiles[pos]-1){// 当前格子是陷阱失败return-1;}postiles[pos]1?2:1;steps;}}intmain(){charline[200000];inttiles[10000];intn0;fgets(line,sizeof(line),stdin);char*tokenstrtok(line,,\r\n);while(token!NULL){tiles[n]atoi(token);tokenstrtok(NULL,,\r\n);}printf(%d\n,solve(tiles,n));return0;}完整用例用例10,1,-1,0,0用例21,0,-1,0用例30用例4-1,0用例51,1,1,1用例60,0,0,0用例71,0,1,0,0用例80,-1,0,0用例90,1,0,1,0,0用例100,0,1,0,0,0文章目录直线冲刺题目描述输入描述输出描述示例1示例2解题思路核心思想算法步骤复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10
返回列表