信息技术来源:宁波市 2025 学年第二学期高考模拟考试
第 12 题
答案与解析
本题解析
参考答案
A
程序分析
m = len(a)
n = len(a[0])
i,j = 0,n-1
cnt = 0
while i < m and j >= 0:
if a[i][j] < 0:
①
②
else:
③
return cntm、n分别为矩阵的行数和列数,i、j分别是当前访问的行、列下标,初始位置(0,n−1)位于右上角。循环条件要求i < m且j >= 0,循环内根据当前元素是否小于0选择分支。结合统计负数个数的题意和最后返回cnt,可知cnt需要保存累计的负数个数。
每行、每列均为非升序,向右或向下数值不会增大,可以利用当前元素判断一行或一列中的一部分元素。
填空分析
①
从右上角开始,将第i至m−1行、第0至j列作为尚未处理的区域。当a[i][j] < 0时,第j列从第i行往下的元素都不大于它,因此全是负数。需要累计的个数为(m−1)−i+1=m−i,包含当前元素,应填写cnt += m-i。这里统计的是同一列中的行数,不能用列数n−j,也不能漏掉当前行。
②
第j列在尚未处理区域内的负数已全部计入,再检查这一列会重复计数。因此移到左侧一列,继续处理剩余区域,填写j -= 1,行下标i保持不变。
③
进入else分支说明a[i][j] >= 0,包括等于0的情况。由于该行从左向右非升序,第0至j列的元素都不小于a[i][j],本行尚未处理的元素中没有负数。应跳过这一行,填写i += 1,列下标j保持不变。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_ningboermo_q012
