目的地最短步数
牛客网:最短步数
题目描述
考虑你从家出发步行去往一处目的地,该目的地恰好离你整数单位步长(大于等于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