02810: 完美立方
bruteforce, http://cs101.openjudge.cn/practice/02810
形如
输入
一个正整数N (N≤100)。
输出
每行输出一个完美立方。输出格式为: Cube = a, Triple = (b,c,d) 其中a,b,c,d所在位置分别用实际求出四元组值代入。
请按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则b值小的优先输出、仍相同则c值小的优先输出、再相同则d值小的先输出。
样例输入
24样例输出
Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)只对b,c,d循环,用字典。
python
# AC时间: 65ms
n = int(input())
cube = {i**3: i for i in range(2, n+1)}
reversed_cube = {v: k for k, v in cube.items()}
ans = []
for b in range(2, n):
for c in range(b, n):
for d in range(c, n):
if (a := reversed_cube[b]+reversed_cube[c]+reversed_cube[d]) in cube:
ans.append((cube[a], b, c, d))
ans.sort()
for s in ans:
print(f"Cube = {s[0]}, Triple = ({s[1]},{s[2]},{s[3]})")python
import math # AC时间: 202ms
n = int(input())
# 计算立方值并存储在列表中以避免重复计算
cubes = [i ** 3 for i in range(n + 1)]
ans = []
for b in range(2, n):
for c in range(b, n):
for d in range(c, n):
if (a := cubes[b] + cubes[c] + cubes[d]) in cubes:
ans.append((round(math.pow(a, 1 / 3)), b, c, d))
ans.sort()
for a, b, c, d in ans:
print(f"Cube = {a}, Triple = ({b},{c},{d})")当我们将 functools.lru_cache应用到函数上时,每次调用函数,它都会检查其参数是否已经在缓存中如果在缓存中,它将返回缓存的结果,而不需要重新计算。如果没有在缓存中,那么函数将被调用并且结果将被添加到缓存中。当缓存满了,最少使用的条目将被抛弃。
python
# AC时间: 1352ms
from functools import lru_cache
@lru_cache(maxsize = 128)
def cube(i):
return i**3
def solv():
N = int(input())
ans = []
for a in range(2,N+1):
for b in range(2,a):
for c in range(b,a):
for d in range(c,a):
#if a ** 3 == b ** 3 + c ** 3 + d ** 3:
if cube(a) == cube(b) + cube(c) + cube(d):
#print('Cube = %d, Triple = (%d,%d,%d)' %(a,b,c,d))
ans.append((a,b,c,d))
return ans
for a,b,c,d in solv():
print(f"Cube = {a}, Triple = ({b},{c},{d})")python
# AC时间:875ms
n = int(input())
cube = [i**3 for i in range(n+1)]
for a in range(3,n+1):
for b in range(2,a):
for c in range(b,a):
for d in range(c,a):
if cube[a]==cube[b]+cube[c]+cube[d]:
print(f"Cube = {a}, Triple = ({b},{c},{d})")