# 方法一:枚举法
N = int(input())
ls = []
for i in range(1, N + 1): # 计算一次i的三次方存于列表,可减少计算量
"""
这里这一步很新奇,正常思维都会在嵌套循环的最后里面写上a**3=b**3+c**3+d**3,这样写会造成非常大的运算量。
"""
ls.append(i * i * i)
for a in range(2, N + 1): # a从2-N
for b in range(2, a): # b,c,d都不会大于a,这样可减少计算量
for c in range(b, a): # c大于等于b
for d in range(c, a): # d大于等于c,此设置保证非降序
if ls[a - 1] == ls[b - 1] + ls[c - 1] + ls[d - 1]:
print("Cube = {},Triple = ({},{},{})".format(a, b, c, d))
# 方法五:列表推导式
n = int(input())
ls = [(a, b, c, d) for a in range(2, n + 1) for b in range(2, n + 1)
for c in range(b, n + 1) for d in range(c, n + 1)
if a ** 3 == b ** 3 + c ** 3 + d ** 3 and b < c < d]
ls.sort(key=lambda x: (x[0], x[1], x[2], x[3])) # sort可以实现多key值排序
for i in range(len(ls)):
print('Cube = {},Triple = ({},{},{})'.format(ls[i][0], ls[i][1], ls[i][2], ls[i][3]))
# 简化列表推导式
n = int(input())
ls = [(a, b, c, d) 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]
for i in range(len(ls)):
print('Cube = {},Triple = ({},{},{})'.format(ls[i][0], ls[i][1], ls[i][2], ls[i][3]))
# 方法二:枚举法+抹去不满足条件的数,a从6开始
N = int(input())
ls = []
for i in range(1, N + 1): # 计算一次i的三次方存于列表,可减少计算量
ls.append(i * i * i)
for a in range(6, N + 1): # 小于6无满足条件的数,可减少计算量
for b in range(2, a): # b,c,d都不会大于a,这样可减少计算量
for c in range(b, a): # c大于等于b
for d in range(c, a): # d大于等于c,此设置保证非降序
if a * a * a == b * b * b + c * c * c + d * d * d:
print("Cube = {},Triple = ({},{},{})".format(a, b, c, d))
# 方法三itertools 模块:
"""
itertools 模块 的combinations(iterable, r) 方法可以创建一个迭代器,
返回 iterable 中所有长度为 r 的子序列,返回的子序列中的项按输入 iterable 中的顺序排序。
(iterable是一个数列,返回iterable所有长度为r的子数列,这些子数列的排序是按照母数列iterable中的顺序)
n = int(input())
ls = itertools.combinations(range(2,n + 1),3)
print(list(ls))
输入8
可以输出小于8的所有长度这3的子序列
[(2, 3, 4), (2, 3, 5), (2, 3, 6), (2, 3, 7), (2, 3, 8), (2, 4, 5), (2, 4, 6), (2, 4, 7),
(2, 4, 8), (2, 5, 6), (2, 5, 7), (2, 5, 8), (2, 6, 7), (2, 6, 8), (2, 7, 8), (3, 4, 5),
(3, 4, 6), (3, 4, 7), (3, 4, 8), (3, 5, 6), (3, 5, 7), (3, 5, 8), (3, 6, 7), (3, 6, 8),
(3, 7, 8), (4, 5, 6), (4, 5, 7), (4, 5, 8), (4, 6, 7), (4, 6, 8), (4, 7, 8), (5, 6, 7),
(5, 6, 8), (5, 7, 8), (6, 7, 8)]
"""
import itertools
n = int(input())
ls = itertools.combinations(range(2, n + 1), 3) # 得到长度为 3 的子序列
result = []
for item in ls: # 遍历列表
num = sum([x ** 3 for x in item]) ** (1 / 3) # 序列元素的 3 次幂再再3次方
if round(num, 4) == int(round(num, 4)) <= n: # 如果是不大于 n 的整数
result.append([int(round(num, 4)), item]) # 将该数和对应的元组加到列表中
result.sort(key=(lambda x: x[0])) # 列表元素排序
for x in result: # 遍列表,按格式输出
print("Cube = {},Triple = ({},{},{})".format(x[0], *x[1]))
# 方法四函数:
import itertools
def subsequences(n):
return itertools.combinations(range(2, n + 1), 3)
def answer(ls):
result = []
for item in ls: # 遍历列表
num = sum([x ** 3 for x in item]) ** (1 / 3) # 序列元素的 3 次幂再再3次方
if round(num, 4) == int(round(num, 4)) <= n: # 如果是不大于 n 的整数
result.append([int(round(num, 4)), item]) # 将该数和对应的元组加到列表中
result.sort(key=(lambda x: x[0])) # 列表元素排序
return result
def output(ls):
for x in ls: # 遍列表,按格式输出
print("Cube = {},Triple = ({},{},{})".format(x[0], *x[1]))
if __name__ == '__main__':
n = int(input()) # 输入整数
sub = subsequences(n) # 调用subsequences(n)获得子序列生成器
output(answer(sub)) # 调用output()输出,参数是调用answer(sub)得到的列表
完美立方数
最新推荐文章于 2022-01-28 11:47:16 发布