题目内容:
一个n度幻方共有n的平方个数字的排列,它们都是不同的整数,在一个方块中,n个数字在所有行、所有列和所有对角线中的和都相同。
请编写is_magicsquare函数判断一个填充好数字的方形是否是幻方。
#在此处编写is_magicsquare函数的定义代码
if __name__=='__main__':
n = eval(input())
ls = []
for i in range(n):
ls.append(list(eval(input())))
#print(ls)
if is_magicsquare(ls)==True:
print('Yes')
else:
print('No')
输入格式:
第一行输入一个整数n,表示该数字正方形的度数。然后下面是n行,每行包含n个用英文逗号分开的正整数。
输出格式:
如果是幻方则输出Yes,否则输出No。
输入样例:
2
1,2
3,4
输出样例:
No
输入样例:
2
4,4
4,4
输出样例:
No
输入样例:
3
8,1,6
3,5,7
4,9,2
输出样例:
Yes
输入样例:
4
16,9,6,3
5,4,15,10
11,14,1,8
2,7,12,13
输出样例:
Yes
时间限制:500ms内存限制:32000kb
代码:
def is_magicsquare(lst):
# 将list转换成集合,去掉重复元素,如果集合长度与list中元素数量相等,则说明没有重复数据
lst_set = set(lst[0])
for i in range(1, len(lst)):
lst_set.update(lst[i])
if len(lst)**2 != len(lst_set):
return False
zero_row_sum = sum(lst[0])
# 判断2个对角线上的数据和,并且都与第0行的数据对比
sum1 = sum([lst[i][i] for i in range(len(lst))])
sum2 = sum([lst[i][len(lst) - 1 - i] for i in range(len(lst))])
if sum1 != sum2 or sum1 != zero_row_sum or sum2 != zero_row_sum:
return False
for i in range(len(lst)):
# 判断第i行和第i列的数据是否相等,并且都与第0行的数据对比
if sum(lst[i]) != zero_row_sum or sum(lst[:][i]) != zero_row_sum or sum(lst[i]) != sum(lst[:][i]):
return False
return True
if __name__=='__main__':
n = eval(input())
ls = []
for i in range(n):
ls.append(list(eval(input())))
#print(ls)
if is_magicsquare(ls)==True:
print('Yes')
else:
print('No')
用例测试结果 | 运行时间 | 占用内存 | 提示 | 得分 |
---|---|---|---|---|
用例1通过 | 37ms | 4748kb | 1 | |
用例2通过 | 37ms | 4632kb | 1 |
本次得分/总分:2.00/2.00分