Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 아기와 거대한 걸음으로 목적지에 도달하는 데 필요한 최적의 걸음 수를 찾는 프로그램

<시간/>

각 쿼리 Q[i]에 삼중항 [a_i, b_i 및 d_i]이 포함된 쿼리 Q 목록이 있다고 가정합니다. 우리가 처음에 위치 (0, 0)에 있다고 가정하면 한 단계에서 어떤 위치 (x1, y1)에서 (x2, y2)로 이동할 수 있습니다. 여기서 이 두 점 사이의 유클리드 거리는 최소 a와 최대 b입니다. 이제 각 쿼리에 대해 (0, 0)에서 (d_i, 0)에 도달하는 데 필요한 최소 단계 수를 찾아야 합니다.

따라서 입력이 Q =[(2,3,1), (1,2,0), (3,4,11)]과 같으면 출력은 [2, 0, 3]이 됩니다. a =2인 (0, 0)의 첫 번째 쿼리는 $\left(\frac{1}{2},\frac{\sqrt{15}}{2}\right)$ 다음 (1, 0) 따라서 두 단계가 필요하므로 출력은 2입니다. 다음 쿼리의 경우 d는 0이므로 단계를 이동할 필요가 없으므로 출력은 0입니다. 그리고 세 번째 쿼리의 경우 b =4 및 a =3으로 이동(0, 0 ) ~ (4, 0) 다음 (8, 0) 다음 (11, 0).

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • steps() 함수를 정의합니다. 이것은, b, d
  • 가 걸립니다.
  • mmin :=최소값, b
  • mmax :=최대값, b
  • d가 0이면
    • 0을 반환
  • d가 mmin 또는 mmax이면
    • 1을 반환
  • d
  • 2 반환
  • (d / mmax)의 상한을 반환
  • 메인 방법에서 다음을 수행하십시오. -
  • res :=새 목록
  • Q의 각 q에 대해 다음을 수행합니다.
    • (a, b, d) :=q
    • res 끝에 단계(a, b, d)의 결과 삽입
  • 반환 결과
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    from math import ceil
    
    def steps(a, b, d):
       mmin = min(a, b)
       mmax = max(a, b)
       if d is 0:
          return 0
       if d in [mmin, mmax]:
          return 1
       if d < mmax:
          return 2
       return ceil(d / mmax)
    
    def solve(Q):
       res = []
       for q in Q:
          a, b, d = q
          res.append(steps(a, b, d))
       return res
    
    Q = [(2,3,1), (1,2,0), (3,4,11)]
    print(solve(Q))

    입력

    [(2,3,1), (1,2,0), (3,4,11)]

    출력

    [2, 0, 2.0]