1.3 KiB
1.3 KiB
P4924 [1007]魔法少女小Scarlet
1、初始化数组的代码
int cnt = 0; //计数器
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
a[i][j] = ++cnt;
.... 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 15 17 18 ....
2、%02d的格式控制
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
printf("%02d ", res[i][j]);
printf("\n");
}
3、矩阵的旋转
我们模拟原位置(i,j)在第一象限,i>0,j>0 逆时针90度,到达的位置是: (-j,i) 顺时针90度,到达的位置是:(j,-i) 180度,到达的位置:(-i,-j)
想方法背下来:
(1)1,3象限,i,j位置不变。 2,4象限,i,j对调
(2)1象限是正的,3象限全是负的 2象限x是负的,y是正的 4象限x是正的,y是负的
4、矩阵的遍历
//逆时针
for (int i = -r; i <= r; i++)
for (int j = -r; j <= r; j++)
f[x - j][y + i] = res[x + i][y + j];
//顺时针
for (int i = -r; i <= r; i++)
for (int j = -r; j <= r; j++)
f[x + j][y - i] = res[x + i][y + j];
5、临时的矩阵变量
防止出现自行覆盖的问题,采用的办法是做一个数组的拷贝,复制品。
memcpy(res, f, sizeof f);