2024-06-01 13:37:20 发布
网友
输入由几个情况组成,每种情况的顺序为n的平方,后面是n行,每行有n个自然数,介于1和n²之间。 比如:
3 6 1 8 7 5 3 2 9 4 1 1 (...)
附加条件:
如果是幻方,应该打印(“是”),如果不是,应该打印(“否”)
所以我的代码解决了所有正确的输入,除了那些有重复的数字,我不知道如何解决这个问题
我的代码
有什么想法???在
您可以使用集合比较来检查1和n²之间的所有数字是否出现一次,并将sum与这样的生成器表达式一起使用,以测试所有行、列和两条主对角线的和是否相同:
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 )
因此:
退货:
True
您可以使用集合比较来检查1和n²之间的所有数字是否出现一次,并将
sum
与这样的生成器表达式一起使用,以测试所有行、列和两条主对角线的和是否相同:因此:
^{pr2}$退货:
相关问题 更多 >
编程相关推荐