#B1. 二维数组题解

二维数组题解

A1119 矩阵交换行

题意

5 x 5矩阵,交换第m行和第n行。

题解

方法1:创建tmp[5]tmp[5]做中介,交换第m行和第n行。

方法2:不交换,直接输出,先输出第n行,再输出第m行。

A1120 同行列对角线的格

题意

n x n矩阵,输出与(i,j)(i,j)同行、同列和同对角线的位置。

题解

  1. 同一行:(i,1),(i,2),...,(i,n)(i,1),(i,2),...,(i,n)
  2. 同一列:(1,j),(2,j),...,(n,j)(1,j),(2,j),...,(n,j)
  3. 左上到右下对角线:(x,y),(i,j)>(xy)==(ij)(x,y),(i,j)->(x-y)==(i-j)
  4. 左下到右上对角线:(x,y),(i,j)>(x+y)==(i+j)(x,y),(i,j)->(x+y)==(i+j)

如果是判断(i,j)(i,j)和(x,y)是否在同一对角线,行相减的绝对值等于相减的绝对值,即abs(xi)==abs(yj)abs(x-i)==abs(y-j)

A1121 计算矩阵边缘元素之和

题意

m x n矩阵,边缘元素之和。

题解

方法1:第一行+最后一行+第一列+最后一列-四个角

方法2:遍历数组,判断是否为边缘元素,是则相加。

A1122 计算鞍点

题意

5 x 5矩阵,输出鞍点,鞍点即该元素是所在行的最大值,并且是所在列的最小值。

题解

遍历数组,找出该行最大值,再判断是否为该列最小值。

A1124 矩阵加法

题意

n x m矩阵A和B,求A + B。

题解

对应相加

A1125 矩阵乘法

题意

n x m矩阵A和B,求A x B。

题解

三重循环求矩阵乘法

A1126 矩阵转置

题意

n x m矩阵,输出转置矩阵,即交换横纵坐标。

题解

方法1:a[i][j]>b[j][i]a[i][j]->b[j][i],输出b矩阵。

方法2:i:1>m,j:1>n,cout<<a[j][i]i:1->m,j:1->n,cout<<a[j][i]

A1127 图像旋转

题意

n x m矩阵,顺时针旋转90度后输出。

题解

方法1:i:1>m,j:n>1,cout<<a[j][i]i:1->m,j:n->1,cout<<a[j][i]

方法2:a[i][j]>b[j][n+1i]a[i][j]->b[j][n+1-i]

A1128 图像模糊处理

题意

n x m矩阵,四周元素不变,其他元素改为该元素与上下左右相邻四个元素的均值,四舍五入。

题解

非四周元素:

$b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j+1]+a[i][j-1]+a[i][j])/5.0);$

四周元素:

b[i][j]=a[i][j];b[i][j]=a[i][j];

P1789【Mc生存】插火把

题意

n x n矩阵,m个火把,k个萤石。火把与萤石有对应照亮范围,统计矩阵中未被照亮的位置之和。

题解

方法1:如果是火把,坐标为(x,y)(x,y),则把i:(x2)>(x+2),j:(y2)>(y+2)i:(x-2)->(x+2),j:(y-2)->(y+2)的点都打上标记;如果是萤石,坐标为(x,y)(x,y),把i:(x2)>(x+2),j:(y2)>(y+2)i:(x-2)->(x+2),j:(y-2)->(y+2)abs(ix)+abs(jy)2abs(i-x)+abs(j-y)\leq 2的点打上标记。最后遍历数组,统计未标记的点总数。

方法2:上下左右四个相邻的点可以表示为$(x+dx[k],y+dy[k]),dx= \left\{ 0,0,-1,1 \right\},dy=\left\{ -1,1,0,0 \right\},k=0,1,2,3$。同理可写出火把与萤石的所有可照亮位置的偏移量。打上标记,最后统计未标记的点总数。

P1319 压缩技术

题意

给压缩码,还原矩阵

题解

模拟题意

P1320 压缩技术(续集版)

题意

给矩阵,求压缩码

题解

模拟压缩过程

P365 蛇形填数

题意

n x n矩阵,蛇形填入1- n x n,总共n x n个数。

n=4

10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

题解

按题意模拟,填n x n次。

P366 回形方阵

题意

输入为n,代表回形方阵最外圈数字为n,输出(2n+1) x (2n+1)的矩阵。

题解

方法1:按题意模拟,填入。

方法2:根据a[i][j]a[i][j]离边缘的距离输出。pos=min(i,j,(2n)i,(2n)j),cout<<npospos=min(i,j,(2n)-i,(2n)-j),cout<<n-pos

方法3:0>n10->n-1全填8,1>n21->n-2全填7。

该题注意的点:输出用cout << setw(2) << n - pos;因为用cout << n - pos <<" ";无法AC。

P5729 工艺品制作

题意

三维数组,q次删除,每次删除(x1,y1,z1)(x1,y1,z1)(x2,y2,z2)(x2,y2,z2) 位置的数,问剩下多少数。

题解

标记删除的数,统计剩下的数。