求最小步数

题目描述

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

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

输入描述

坐标点n

输出描述

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

备注1 <= n <= 10^9

示例一

输入

4

输出

2

说明

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

思路

分情况讨论:

  1. n = 1。那么至少需要走两次,向右走3步,向左走2步。
  2. n%3=0。显然向右走n//3步就可以到达n,而且n//3一定是最小步数。
  3. n % 3 = 2。由于n除以32,那么前n-2步我们可以均用步长3来填充,一共需要走n//3步,最后再走2步。这样总的步数为 n//3+1
  4. n % 3 = 1。优先从n中拿出余数1和一个3,凑成2个2步,剩下的一定是3的整数倍,按3步来走。
n = int(input())
if n == 1:
    print(2)
elif n % 3 == 0:
    print(n//3)
elif n%3==2:
    print(n//3 + 1)
else:
    print((n-3-1)//3+2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值