สมมติว่าเรามีตัวเลข N เราต้องกำหนดลูกบาศก์ที่สมบูรณ์แบบที่ใหญ่ที่สุดที่สามารถสร้างได้โดยการลบตัวเลขขั้นต่ำ (อาจเป็น 0) ออกจากตัวเลข เราสามารถลบตัวเลขใด ๆ ออกจากหมายเลขที่กำหนดเพื่อให้บรรลุเป้าหมาย อย่างที่เราทราบกันดีว่าตัวเลข N จะเรียกว่าลูกบาศก์สมบูรณ์ ถ้า N =M^3 สำหรับจำนวนเต็ม M บางส่วน
ดังนั้น หากอินพุตเป็น 806 เอาต์พุตจะเป็น 8 เนื่องจากเราสามารถลบ 0 และ 6 ออกจากตัวเลขได้ เราก็จะได้ 8 ซึ่งเป็นลูกบาศก์ที่สมบูรณ์แบบของ 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน preProcess() นี่จะใช้เวลา n
- temp_cubes :=รายการใหม่
- สำหรับ i ในช่วง 1 ถึงเพดาน n^(1/3) ทำ
- ลูกบาศก์ =i^3
- cubeString :=cube เป็นสตริง
- แทรก cubeString ที่ส่วนท้ายของ temp_cubes
- ส่งคืน temp_cubes
- กำหนดฟังก์ชัน Solve() นี่จะใช้เวลา num,temp_cubes
- ย้อนกลับ temp_cubes
- totalCubes :=ขนาดของ temp_cubes
- สำหรับฉันในช่วง 0 ถึง TotalCubes ทำ
- อุณหภูมิ :=temp_cubes[i]
- digitsInCube :=ขนาดอุณหภูมิ
- ดัชนี :=0
- digitsInNumber :=ขนาดของ num
- สำหรับ j ในช่วง 0 ถึง digitsInNumber ทำ
- ถ้า num[j] เหมือนกับ temp[index] แล้ว
- ดัชนี :=ดัชนี + 1
- ถ้า digitsInCube เหมือนกับดัชนี แล้ว
- อุณหภูมิกลับ
- ถ้า num[j] เหมือนกับ temp[index] แล้ว
- ส่งคืน "เป็นไปไม่ได้"
- จากวิธีการ ให้ทำดังต่อไปนี้ -
- temp_cubes :=preProcess(n)
- num :=n เป็นสตริง
- ตอบ :=แก้ (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