回旋矩阵一

之前面试的时候有一道关于螺旋矩阵的算法题,此处转载一篇:

结构图







将螺旋矩阵分为四个区块对其逐个赋值的。比如基数是,第一区块第一行元素1、2、3,第二区块是4,第三区块5、6,以此类推。

第一区块:赋值时行数不变,列数改变。

第二区块:列数不变,行数改变。

第三区块同第一区块、第四区块同第二区块。

实现代码:

[plain]  view plain  copy
  1. #include <stdio.h>  
  2. #define N 20  
  3. int main(void)  
  4. {  
  5.     int i,j,k,base=1,n;  
  6.     int a[N][N]={0};  
  7.     printf("请输入你想要得到几阶矩阵:\n");  
  8.     scanf("%d",&n);  
  9.     for(k=0;k<n/2;k++)     //n/2为矩阵的矩形数目  
  10.     {  
  11.         for(i=k;i<=n-1-k;i++)//第一区块  
  12.             a[k][i]=base++;;  
  13.         for(j=k+1;j<n-1-k;j++)//第二区块  
  14.             a[j][n-1-k]=base++;  
  15.         for(i=n-1-k;i>k;i--)//第三区块  
  16.             a[n-1-k][i]=base++;  
  17.         for(j=n-1-k;j>k;j--)//第四区块  
  18.             a[j][k]=base++;  
  19.         if(n%2==1)  
  20.             a[(n-1)/2][(n-1)/2]=base;//为基数是奇数的矩阵的中心点进行赋值  
  21.     }  
  22.     //输出矩阵  
  23.     for(i=0;i<n;i++)  
  24.     {  
  25.         for(j=0;j<n;j++)  
  26.             printf("%-4d",a[i][j]);  
  27.         printf("\n");  
  28.     }  
  29.     return 0;  
  30. }    

输出:

基数是奇数的矩阵


基数是偶数的矩阵


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值