Computer >> Máy Tính >  >> Lập trình >> Python

Tìm Khối lập phương lớn nhất được hình thành bằng cách Xóa các chữ số tối thiểu khỏi một số trong Python

Giả sử chúng ta có một số N, chúng ta phải xác định khối lập phương hoàn hảo lớn nhất có thể được tạo ra bằng cách loại bỏ các chữ số nhỏ nhất (có thể là 0) khỏi số đó. Chúng tôi có thể xóa bất kỳ chữ số nào từ số đã cho để đạt được mục tiêu. Như chúng ta biết một số N được gọi là một khối lập phương hoàn hảo nếu N =M ^ 3 với một số nguyên M.

Vì vậy, nếu đầu vào giống như 806, thì đầu ra sẽ là 8, vì chúng ta có thể xóa 0 và 6 khỏi số, thì chúng ta sẽ nhận được 8, đây là khối lập phương hoàn hảo của 2.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm preProcess (). Điều này sẽ mất n
  • temp_cubes:=một danh sách mới
  • đối với tôi trong phạm vi từ 1 đến trần là n ^ (1/3), hãy thực hiện
    • cube =i ^ 3
    • cubeString:=cube as string
    • chèn cubeString vào cuối temp_cubes
    • trả về temp_cubes
  • Xác định một hàm giải quyết (). Điều này sẽ mất num, temp_cubes
  • ngược temp_cubes
  • totalCubes:=kích thước của temp_cubes
  • đối với tôi trong phạm vi từ 0 đến totalCubes, hãy thực hiện
    • temp:=temp_cubes [i]
    • chữ sốInCube:=kích thước của nhiệt độ
    • chỉ mục:=0
    • chữ sốInNumber:=kích thước của num
    • đối với j trong phạm vi 0 đến chữ sốInNumber, thực hiện
      • nếu num [j] giống với temp [index], thì
        • index:=index + 1
      • nếu chữ sốInCube giống như chỉ mục, thì
        • nhiệt độ trở lại
  • trả về "Không thể"
  • Từ phương pháp, hãy làm như sau -
  • temp_cubes:=preProcess (n)
  • num:=n dưới dạng chuỗi
  • ans:=giải quyết (num, temp_cubes)
  • trả lại ans

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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) )

Đầu vào

806

Đầu ra

8