由外向内生成N*N矩阵

</pre><p></p><p>前两天在线笔试时的一道题,生成一个N为的矩阵,形式如下</p><p>N=3</p><p> 1  2  3</p><p> 8  9  4</p><p> 7  6  5</p><p>当时用下面的方法去写 结果总是出错,也不能debug,最终没调出来。考完后重新调了一下 不过觉得应该有更好的算法才对,可是想不出来,请大家多多指教。</p>#include<stdio.h><pre name="code" class="cpp">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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值