用python检查它是否是一个魔方

2024-06-01 13:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

输入由几个情况组成,每种情况的顺序为n的平方,后面是n行,每行有n个自然数,介于1和n²之间。 比如:

3
6 1 8
7 5 3
2 9 4

1
1
(...)

附加条件:

  • 1到n²之间的所有数字都会出现一次
  • 所有行、列和两条主对角线的和必须相同。在

如果是幻方,应该打印(“是”),如果不是,应该打印(“否”)

所以我的代码解决了所有正确的输入,除了那些有重复的数字,我不知道如何解决这个问题

我的代码

^{pr2}$

有什么想法???在


Tags: 代码顺序情况数字对角线幻方pr2附加条件
4条回答

您可以使用集合比较来检查1和n²之间的所有数字是否出现一次,并将sum与这样的生成器表达式一起使用,以测试所有行、列和两条主对角线的和是否相同:

def is_magic(m):
    n = len(m)
    s = (n ** 2 + 1) * n // 2
    return (
        set(range(1, n ** 2 + 1)) == set(i for r in m for i in r) and
        all(sum(r) == s for r in (*m, *zip(*m))) and
        sum(m[i][i] for i in range(n)) == sum(m[i][-i - 1] for i in range(n)) == s
    )

因此:

^{pr2}$

退货:

True

相关问题 更多 >