当前位置: 首页 > news >正文

矩阵运算类题型的问题

矩阵运算类题型的问题

一、矩阵题通用结构(必背)
所有矩阵题几乎都是这 4 步:

  1. 定义二维数组:int a[10][10];
  2. 输入大小 n:scanf("%d", &n);
  3. 双层循环输入矩阵:
    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 类题型模板

  1. 求矩阵所有元素和
    c
    运行
    int sum = 0;
    for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    sum += a[i][j];

  2. 求主对角线和
    c
    运行
    for(i=0;i<n;i++)
    sum += a[i][i];

  3. 求副对角线和
    c
    运行
    for(i=0;i<n;i++)
    sum += a[i][n-1-i];

  4. 求四周元素和
    c
    运行
    if(i0 || in-1 || j0 || jn-1)
    sum += a[i][j];

  5. 求中心区域(去掉最外一圈)
    c
    运行
    if(i>0 && i<n-1 && j>0 && j<n-1)

  6. 矩阵转置(行变列)
    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.累加或输出