智能体软件落地实践:从概念到项目全流程解析
2026/9/26 23:21:22
2025华为OD机试 - 华为OD上机考试 100分题型
华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解
求从坐标零点到坐标点n的最小步数,一次只能沿横坐标轴向左或向右移动 2 或 3。
注意:途径的坐标点可以为负数
坐标点n,1 <= n <= 10^9
输出从坐标零点移动到坐标点n的最小步数
42从坐标零点移动到4,最小需要两步,即右移2,再右移2
思路:数学规律
n == 1时的情况为{-2,3},需要两步。n >=2的情况,存在规律需要的步数为ceil(n /3)向上取整#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> #include<cmath> using namespace std; int main() { int n ; cin >> n; // -2 3 if (n == 1) { cout << 2; } else { //cout << (int)ceil(1.0 * n / 3); cout << (n + 2) / 3; } return 0; }import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // -2 3 if (n == 1) { System.out.print(2); } else { // cout << (int)ceil(1.0 * n / 3); System.out.print((n + 2) / 3); } } }n=int(input())# -2 3ifn==1:print(2)else:# print(math.ceil(1.0 * n / 3))print((n+2)//3)constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout,terminal:false});rl.on('line',line=>{letn=parseInt(line.trim());// -2 3if(n===1){console.log(2);}else{console.log(Math.floor((n+2)/3));}});packagemainimport"fmt"funcmain(){varnintfmt.Scan(&n)// -2 3ifn==1{fmt.Print(2)}else{// fmt.Print(int(math.Ceil(float64(n) / 3)))fmt.Print((n+2)/3)}}