螺旋方阵 数组循环右移及知识点
螺旋方阵
流程图
核心代码
- //主要找规律,一圈一循环
```for (l = 0; l < n / 2+1; l++) {//循环的次数,注意奇数和偶数
```if (n % 2 != 0 && l == (n / 2 )) {
a[l][l] = ++b;//奇数的最后一趟只有一个数需要赋值,而偶数最后还是一个小正方形
}//利用flag标记每次循环行列的规律
for (i = l; i < flag; i++) {
a[l][i] = ++b;//i为列数
}
for (k = l; k < flag; k++) {
a[k][i] = ++b;//k为行数
}
for (t = i; t > l; t--) {
a[k][t] = ++b;//n-
}
for (m = k; m > l; m--) {
a[m][t] = ++b;
}
flag -= 1;//规律
}
数组循环右移
- 从这两个方法理解时间换空间,空间换时间//不知道理解的对不对
· n为s数组长度,m为右移的数
· m=m%n;
方法一:找规律,浪费空间
b[]与a[]数组元素一样
核心代码//需要重开一个数组,浪费空间,否则会出现元素覆盖;
a[(i + m) % n] = b[i];
## 方法二:暴力,浪费时间
```for (i = 0; i < m; i++) {
int temp = a[n - 1];
for (j = n - 1; j = 1; j--)
a[j] = a[j - 1];
a[0] = temp;
}
二维数组同理右移左移同理
# 近期知识点
1.···跟指针有关的一定要先初始化或者复制
才能进行输入、四则运算,否则会出现访问内存冲突;
for example
```char p[4][20];
```for(i=0;i<4;i++)scanf("%s",p[i]);/*但如果定义为 ```char *p[4],就不行,因为此时系统并未指针分配内存*/
2.空串 a="\0";
3.进制转换注意-'0'或者-'a';
4.一旦指针错误,很容易出现段错误