由外向内生成N*N矩阵

前两天在线笔试时的一道题,生成一个N为的矩阵,形式如下

N=3

 1  2  3

 8  9  4

 7  6  5

当时用下面的方法去写 结果总是出错,也不能debug,最终没调出来。考完后重新调了一下 不过觉得应该有更好的算法才对,可是想不出来,请大家多多指教。

#include
void gen_matrix(int n){
	int i, j, tmp, count, arr[n][n];
	i = j = 0; tmp = 1;
	count = 0;
	while(tmp <= n * n){
		while(j < n - count){                        //向右生成矩阵元素
			arr[i][j] = tmp;
			tmp++;
			j++;
		}
		j--;                                        //回复j到边界位置
		i++;                                        //将i向下移动一未
		while(i < n - count){                       //向下生成矩阵元素
			arr[i][j] = tmp;
			tmp++;
			i++;
		}
		i--;                                       //恢复i到边界位置
		j--;                                       //将j向左移动一位
		while(j >= count){                         //向左生成矩阵元素
			arr[i][j] = tmp;
			tmp++;
			j --;
		}
		j++;                                       //恢复j到边界位置
		i--;                                       //将i向上移动一位
		while(i > count){                          //向上生成一位
			arr[i][j] = tmp;
			tmp++;
			i--;
		}
		i++;                                      //恢复i到边界位置
		j++;                                      //将j向右移动一位
		count ++;                                 //圈数+1
	}
	for(i = 0; i < n; i++){
		for(j = 0; j < n; j++)
			printf("%d ", arr[i][j]);
	}
}

int main(void){
	int n, i, j;
	scanf("%d", &n);
	gen_matrix(n);
	return 0;
}



你可能感兴趣的:(leetcode)