矩阵运算类题型的问题
一、矩阵题通用结构(必背)
所有矩阵题几乎都是这 4 步:
- 定义二维数组:int a[10][10];
- 输入大小 n:scanf("%d", &n);
- 双层循环输入矩阵:
c
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d", &a[i][j]);
4.双层循环遍历处理:
c
for(i=0; i<n; i++)
for(j=0; j<n; j++)
// 这里写判断/计算
二、常考位置判断(核心!)
下标默认从 0 开始,n 阶方阵:
| 位置 | 判断条件 |
|---|---|
| 主对角线 | i == j |
| 副对角线 | i + j == n - 1 |
| 上三角(主对角线上) | j >= i |
| 下三角(主对角线下) | j <= i |
| 第一行 | i == 0 |
| 最后一行 | i == n - 1 |
| 第一列 | j == 0 |
| 最后一列 | j == n - 1 |
三、最常考 6 类题型模板
-
求矩阵所有元素和
c
运行
int sum = 0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
sum += a[i][j]; -
求主对角线和
c
运行
for(i=0;i<n;i++)
sum += a[i][i]; -
求副对角线和
c
运行
for(i=0;i<n;i++)
sum += a[i][n-1-i]; -
求四周元素和
c
运行
if(i0 || in-1 || j0 || jn-1)
sum += a[i][j]; -
求中心区域(去掉最外一圈)
c
运行
if(i>0 && i<n-1 && j>0 && j<n-1) -
矩阵转置(行变列)
c
运行
for(i=0;i<n;i++)
for(j=0;j<n;j++)
b[j][i] = a[i][j];
四、最容易错的 3 个坑
1.下标从 0 还是 1 开始
做题一律用 0 开始,副对角线是 i+j == n-1,不是 i+j == n。
2.多个条件同时排除
要用 && 而不是 ||
要同时满足:不是 A 且 不是 B 且 不是 C
3.输出格式
输出矩阵:每一行输完要 printf("\n");
只输出一个和:直接 printf("%d", sum);
五、你可以这样快速做题
1.先写输入框架
2.再写双层循环
3.把题目要求翻译成一行 if 条件
4.累加或输出
