目的地最短步数

目的地最短步数
牛客网:最短步数

题目描述

考虑你从家出发步行去往一处目的地,该目的地恰好离你整数单位步长(大于等于1)。你只能朝向该目的地或者背向该目的地行走,而你行走的必须为单位步长的整数倍,且要求你第N次行走必须走N步。 请就给出目的地离你距离,判断你是否可以在有限步内到达该目的地。如果可以到达的话,请计算到达目的地的最短总步数(不能到达则输出-1)。

输入描述:
1个整数:目的地离你距离T

输出描述:
1个整数:最短总步数(进行了多少次行走)

示例1
输入 2 输出 3

说明
距离目的地2, 需要3步:朝向走1,背向走2,朝向走3

思路:
首先我们要一直往前走,直到走的路程超过给定的距离T为止。起码我们得超过这个距离才行,如果恰好等于T,那么直接输出就行。但是不等的话又该怎么办?很简单,就从我们之前走过的步数中挑一个步数step,让这个步数step反向即可。这样的话我们的距离就变成 total – 2*step,如果恰好等于T,那么此时的 i 就是我们的答案。那么一定能挑到合适的步数吗?那是必须的,前提是total – T 必须是偶数。之前走过的步数挑一个出来是相当简单的,i 之前的自然数随便选,只要符合前提,那就一定可以挑出来。

n = int(input())
i, total = 1, 0
while True:
    total += i
    if total >= n and (total-n)%2==0:
        print(i)
        break
    i += 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值