61 lines
1.3 KiB
Markdown
61 lines
1.3 KiB
Markdown
|
|
### P4924 [1007]魔法少女小Scarlet
|
|||
|
|
|
|||
|
|
#### 1、初始化数组的代码
|
|||
|
|
```c++
|
|||
|
|
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的格式控制
|
|||
|
|
```c++
|
|||
|
|
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、矩阵的遍历
|
|||
|
|
```c++
|
|||
|
|
//逆时针
|
|||
|
|
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、临时的矩阵变量
|
|||
|
|
防止出现自行覆盖的问题,采用的办法是做一个数组的拷贝,复制品。
|
|||
|
|
```c++
|
|||
|
|
memcpy(res, f, sizeof f);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
|
|||
|
|
|