在列表中查找三角形数字

Finding Triangle numbers in the list

提问人:Newbie Coder 提问时间:11/12/2023 最后编辑:Newbie Coder 更新时间:11/12/2023 访问量:97

问:

我需要帮助在列表中查找数字,如果它是三角形数字,如果它是三角形数字,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。

python-3.x 列表

评论

1赞 Dima Chubarov 11/12/2023
你如何定义三角形数字?

答:

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 

现在,解决挑战是在每个给定的输入上调用此函数。