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

괭이를 찾는 프로그램은 파이썬에서 규칙을 유지하면서 배포하면서 많은 아이들에게 사탕을 얻을 것입니다.

<시간/>

k개의 사탕이 있다고 가정합니다. 아이들에게 나누어주어야 합니다. 이제 몇 가지 규칙이 있습니다.

  • 이 아이는 i^2개의 사탕을 받습니다.
  • 색인 i의 모든 어린이는 색인 1에서 i-i까지의 모든 어린이에게 제공될 때까지 사탕을 받지 않을 것입니다.
  • i번째 아이들이 i^2개의 사탕을 받지 못하면 유효한 서브가 아닙니다.

따라서 입력이 k =20과 같으면 출력은 3이 됩니다. 왜냐하면 첫 번째 것은 1을 얻고, 두 번째는 2^2 =4를, 세 번째는 3^2 =9를 얻지만 네 번째는 4가 필요하기 때문입니다. ^2 =16이지만 사탕이 6개밖에 남지 않았으므로 유효한 배포가 아니므로 3명의 어린이만 제공됩니다.

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

  • 왼쪽 :=0, 오른쪽 :=k
  • 오른쪽 - 왼쪽> 1, do
    • 중간 :=(왼쪽 + 오른쪽) / 2의 바닥
    • 바닥이 (mid * (mid + 1) * (2 * mid + 1) / 6)> k인 경우
      • 오른쪽 :=중간
    • 그렇지 않으면
      • 왼쪽 :=중간
  • 맞으면 *(오른쪽 + 1) *(2 * 오른쪽 + 1) <=k * 6이면
    • 우회전
  • 좌회전

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(k):
   left = 0
   right = k
   while (right - left > 1):
      mid = (left + right) // 2
      if (mid * (mid + 1) * (2 * mid + 1) // 6 > k):
         right = mid
      else:
         left = mid
   if (right * (right + 1) * (2 * right + 1) <= k * 6):
      return right
   return left

k = 20
print(solve(k))

입력

20

출력

3