☰
华为OD机试 - 最小步数 (C++ Python JAVA JS GO)
2026/9/26 2:28:17 网站建设 项目流程

最小步数

2025华为OD机试 - 华为OD上机考试 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

求从坐标零点到坐标点n的最小步数,一次只能沿横坐标轴向左或向右移动 2 或 3。

注意:途径的坐标点可以为负数

输入描述

坐标点n,1 <= n <= 10^9

输出描述

输出从坐标零点移动到坐标点n的最小步数

用例1

输入

4

输出

2

说明

从坐标零点移动到4,最小需要两步,即右移2,再右移2

题解

思路:数学规律

  1. 本题只会存在两种情况, 对于n == 1时的情况为{-2,3},需要两步。
  2. 对于n >=2的情况,存在规律需要的步数为ceil(n /3)向上取整
  3. 明白上面规律之后,这个题就很简单了。

c++

#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; }

JAVA

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); } } }

Python

n=int(input())# -2 3ifn==1:print(2)else:# print(math.ceil(1.0 * n / 3))print((n+2)//3)

JavaScript

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));}});

Go

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)}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询