解题思路:
使用2个状态列表去存储每一行和每一列,奇数为1,偶数为0。本次的关键是如何找出只修改一次的位置。由于修改一次后,会同时改变其中一行和其中一列的奇偶性,因此要求行状态列表和列状态列表中只能各出现一次1。例如行状态为[0,0,1,0],列状态为[0,0,0,1],此时即可完成修改。
注意事项:
列表下标索引是从0开始的,但行列下标是从1开始的,不少地方需要注意+1
参考代码:
n=int(input()) a=[] #存矩阵 rows=[] #矩阵每一行的状态:奇数为1,偶数为0 cols=[] #矩阵每一列的状态:奇数为1,偶数为0 for i in range(n): tmp=list(map(int, input().split())) a.append(tmp) #读入到矩阵的每行 rows.append(sum(tmp)%2) #计算矩阵每行的状态,使用模2是保证状态只有0和1 for j in range(n): sum1=0 for i in range(n): sum1+=a[i][j] cols.append(sum1 % 2) #计算矩阵每列的状态,使用模2是保证状态只有0和1 #题目要求的3个判断 if sum(cols)==0 and sum(rows)==0: #如果行和列状态均为0,说明全为偶数 print("OK") elif sum(cols)==1 and sum(rows)==1: #如果行和列各有一个状态1,说明可通过一次修改完成 print("%d %d" % (rows.index(1)+1,cols.index(1)+1)) #使用index返回第一次出现状态1的下标 else: print("Corrupt")
0.0分
6 人评分
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:682 |
简单的a+b (C语言代码)浏览:623 |
C语言程序设计教程(第三版)课后习题7.2 (Java代码)浏览:681 |
C语言训练-角谷猜想 (C语言代码)浏览:1705 |
【亲和数】 (C语言代码)浏览:855 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:702 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:746 |
WU-蓝桥杯算法提高VIP-Quadratic Equation (C++代码)浏览:1742 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:603 |
wu-淘淘的名单 (C++代码)浏览:1331 |