提问人:Newbie Coder 提问时间:11/12/2023 最后编辑:Newbie Coder 更新时间:11/12/2023 访问量:97
在列表中查找三角形数字
Finding Triangle numbers in the list
问:
我需要帮助在列表中查找数字,如果它是三角形数字,如果它是三角形数字,1(字符串格式),否则 0(也是字符串格式)。
例如:
输入:n = [3, 4, 6, 55, 345]
输出:“10110”
另一个例子:
输入:n = [0, 1, 2, 5]
输出:“1100”
提前致谢。
我正在使用 Python 3.12。
这是我的代码:
n = [1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035]
a = int(input())
b = list(map(int,input().split()))
d = ""
for i in b:
if i in n:
d += "1"
else:
d += "0"
print(d)
但它受到 1035 的限制。有没有办法在不使用列表的情况下检查它?可以输入的最大数量是 10^8。
答:
3赞
Goku - stands with Palestine
11/12/2023
#1
三角形数或三角形数对排列在等边三角形中的物体进行计数。三角形数是图形数的一种,其他示例是平方数和立方体数。第 n 个三角形数是三角形排列中每边有 n 个点的点数,等于 1 到 n 的 n 个自然数之和
https://en.wikipedia.org/wiki/Triangular_number
前 20000 个三角形数字..同样,您可以根据需要增加限制。
正如@Kelly建议的那样,将元素保留在set
from itertools import accumulate
limit = 20000
a = set(accumulate(range(1, limit+1)))
对于您的问题,您可以执行以下操作:
n = [3, 4, 6, 55, 345]
''.join('1' if x in a else '0' for x in n )
#output
'10110'
4赞
trincot
11/12/2023
#2
您可以通过检查是否存在正整数 n 来知道数字 x 是否为三角形,例如 x = n(n+1)/2。正如维基百科所提到的,这意味着:
...整数 x 是三角形,当且仅当 8x + 1 是正方形。
使用它,我们可以拥有以下功能:
def is_triangular(x):
square = 8*x + 1
return round(square ** 0.5) ** 2 == square
现在,解决挑战是在每个给定的输入上调用此函数。
评论