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

Python의 숫자에서 최소 자릿수를 삭제하여 형성된 가장 큰 큐브 찾기

<시간/>

숫자 N이 있다고 가정하고 숫자에서 최소 자릿수(0 가능)를 제거하여 생성할 수 있는 가장 큰 완전 큐브를 결정해야 합니다. 목표에 도달하기 위해 주어진 숫자에서 숫자를 삭제할 수 있습니다. 우리가 알고 있듯이 어떤 정수 M에 대해 N =M^3인 경우 숫자 N을 완전 입방체라고 합니다.

따라서 입력이 806과 같으면 출력은 8이 됩니다. 숫자에서 0과 6을 삭제할 수 있으므로 8을 얻을 수 있습니다. 이것은 2의 완벽한 세제곱입니다.

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

  • preProcess() 함수를 정의합니다. n
  • 소요됩니다.
  • temp_cubes :=새 목록
  • 범위 1에서 n^(1/3)의 상한까지의 i에 대해
    • 큐브 =i^3
    • cubeString :=큐브를 문자열로
    • temp_cubes 끝에 cubeString 삽입
    • temp_cubes 반환
  • solve() 함수를 정의합니다. num,temp_cubes
  • 가 걸립니다.
  • 역 temp_cubes
  • totalCubes :=temp_cubes의 크기
  • 0~totalCubes 범위의 i에 대해
    • temp :=temp_cubes[i]
    • digitsInCube :=온도 크기
    • 색인:=0
    • digitsInNumber :=숫자의 크기
    • 0~digitInNumber 범위의 j에 대해 다음을 수행합니다.
      • num[j]가 temp[index]와 같으면
        • 인덱스 :=인덱스 + 1
      • digitInCube가 인덱스와 같으면
        • 반환 온도
  • "불가능" 반환
  • 방법에서 다음을 수행하십시오 -
  • temp_cubes :=preProcess(n)
  • num :=n을 문자열로
  • ans :=해결(num, temp_cubes)
  • 반환

예시

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

import math
def preProcess(n):
   temp_cubes = list()
   for i in range(1, math.ceil(n**(1. / 3.))):
      cube = i**3
      cubeString = str(cube)
      temp_cubes.append(cubeString)
   return temp_cubes
def solve(num,temp_cubes):
   temp_cubes = temp_cubes[::-1]
   totalCubes = len(temp_cubes)
   for i in range(totalCubes):
      temp = temp_cubes[i]
      digitsInCube = len(temp)
      index = 0
      digitsInNumber = len(num)
      for j in range(digitsInNumber):
      if (num[j] == temp[index]):
         index += 1
      if (digitsInCube == index):
         return temp
   return "Not Possible"
def getLargestCube(n):
   temp_cubes = preProcess(n)
   num = str(n)
   ans = solve(num, temp_cubes)
   return ans
n = 806
print(getLargestCube(n) )

입력

806

출력

8