螺旋方阵 数组循环右移及知识点

螺旋方阵

流程图

核心代码

- //主要找规律,一圈一循环
```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.一旦指针错误,很容易出现段错误
posted @ 2019-12-13 16:10  沈达风  阅读(315)  评论(2编辑  收藏  举报