螺旋矩阵(C语言)

螺旋矩阵 : 
    将 1~n^2 的自然数顺时针(或逆时针)填入一个n阶方阵。当 n=5 时,填充效果如下:
         i\j    

               1        2        3        4        5
           
              16      17      18      19       6
            
              15      24      25      20       7
            
              14      23      22      21       8
            
              13      12      11      10       9
              
   ★ 思路:

        1.总结填充 n阶方阵时规律:· 
            1.上行: i(纵坐标)不变,  j(横坐标)改变:0 ~ N-1;
            2.右行: i(纵坐标)改变:0 ~ N-1     j(横坐标)不变;
            3.下行: i(纵坐标)不变    j(横坐标)改变: N-1 ~ loop;
            4.左行: i(纵坐标)改变: N-1 ~ loop    j(横坐标)不变;

        2.将规律套用到每次遍历的每一圈,相当于缩小最外圈的规模,将每一次遍历都看作是最外层的填充:

                                               

          3.如果是逆时针填充,按照相同思路进行。

   ★ 代码实现★

#include <stdio.h>
#define N 5
void Print(int a[][N]){
	int i,j;
	for(i=0 ; i<N ; ++i){
		for(j=0 ; j<N ;++j){
			printf("%4d",a[i][j]);
		}
		printf("\n\n");
	}
}

int main(void){
	int matrix[N][N];
	int i,j,loop,count=0;
	//单独记录 N 的值,使到非最外圈的时候能按
	//比例缩小规模 
	int n=N;
	for(loop=0 ; loop<N/2 ; ++loop){
		i=loop;
		j=i;
		for(j; j<n-1 ; ++j) //上行 
			matrix[i][j] = ++count;
		for(i; i<n-1; ++i)  //右行 
			matrix[i][j] = ++count;
		for(j; j>loop ; --j) //下行
			matrix[i][j] = ++count;
		for(i; i>loop ; --i) //左行
			matrix[i][j] = ++count;
		n--; //缩小规模时,使规律同步 
	}
	
	//若 N 为奇数时,以上操作无法填充完最中间
	//的那个空,则需要单独填充
	if(N%2) 
		matrix[N/2][N/2] = N*N;

	Print(matrix);
	return 0; 
} 

  • 23
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值