各种螺旋矩阵

各种螺旋矩阵螺旋矩阵无聊 不知道干点什么 今天就写个关于螺旋矩阵的问题吧 开始的三个螺旋矩阵采用的是同一种方法 后面会有新方法 由外向内的螺旋矩阵先来看看普通的螺旋矩阵 由外面向里面螺旋的如下 1 nbsp nbsp 2 nbsp 3 nbsp nbsp 4 nbsp nbsp 19 nbsp nbsp 20 nbsp nbsp 21 nbsp nbsp 10 nbsp 9 这样的 N 阶

                                    螺旋矩阵

无聊,不知道干点什么,今天就写个关于螺旋矩阵的问题吧,开始的三个螺旋矩阵采用的是同一种方法,后面会有新方法!

由外向内的螺旋矩阵


先来看看普通的螺旋矩阵,由外面向里面螺旋的 如下:

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

这样的N阶特殊矩阵,处理起来是最好处理的,4个循环分别给4面赋值,然后依次向内跳转就可以了,编写方法很多,我这里随便写了个:

int main() { int num; scanf("%d",&num); int array = (int )malloc(sizeof(int *) * num); //动态创建C语言的二维数组代码 for(int i=0;i 
  
    (num-1)/2 ) break; for(;j 
   
     n-1;j--) array[i][j] = K++; for(;i>n-1;i--) array[i][j] = K++; } if( num%2 != 0) //这个算法在最后一圈是一个元素(即中心)的时候没赋值,所以手动处理最后一个特殊位置 array[num/2][num/2] = num*num; for(i=0;i 
     
    
  

各种螺旋矩阵

看起来好像很好看的样子

由内向外的螺旋矩阵

一般对于螺旋矩阵,我处理的方法都喜欢在末尾把最特殊的单独看待,不想再程序中加很多处理代码来兼容特殊情况,

由内向外的螺旋矩阵如图所示:

各种螺旋矩阵


如果要以这种方式的话,请确保矩阵的边数是奇数!( 奇数会写了偶数也就同样道理了)   我的处理方式依旧还是,最中间那个首先搞为1,然后外层的依次4个循环,废话不多说,程序如下:

#include 
    
  
    
    
    
    
    
      #include 
     
       int main() { int num; scanf("%d",&num); if(num % 2 == 0) exit(0); int array = (int )malloc(sizeof(int *) * num); for(int i=0;i 
      
        num-1) break; for(;i<=x+n;i++) array[i][j] = N++; i--; j--; for(;j>=y-n;j--) array[i][j] = N++; j++; i--; for(;i>=x-n;i--) array[i][j] = N++; i++; j++; for(;j<=y+n;j++) array[i][j] = N++; } for(i=0;i 
        
       
      
    

运行结果如下:

各种螺旋矩阵


方法很多,这种方法只是追求实现而已,可能程序简洁性不太好!!

上三角螺旋矩阵(蓝桥杯题目)

上三角螺旋矩阵,样例如下:

1      2     3     4   5

12   13    14    6

11    15      7

10     8

其实在上面两个螺旋矩阵里面我们都采用的是逐个赋值的方法,利用循环来控制赋值的方向,在这里我们姑且也先用这种方法!因为我觉得这个直观一点,但是他不是最简单的。这个我们稍后再说!由于C++中不支持那种锯齿数组,我们这里姑且用二维数组来表示!!

程序如下:

#include 
     
  
     
     
     
     
     
       #include 
      
        int main(int argc, char* argv[]) { int Num; scanf("%d",&Num); int array = new int* [Num]; for(int i=0; i 
       
         Num/2-1) break; for(;j 
        
          n;i--) array[i][j] = N++; i++; j++; n++; } if(Num%3 == 1) array[Num/3][Num/3] = N; //这里是处理特殊情况,也就是最中间一层只有一个元素时,单独赋值,已经证明在4,7,10时最中间只有一个元素 for(i=0;i 
          
         
        
       
     

运行结果,测试用例Num为19:

各种螺旋矩阵






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211399.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:31
下一篇 2026年3月18日 下午10:31


相关推荐

  • Python多线程通信_python socket多线程

    Python多线程通信_python socket多线程作者:billy版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处创建线程线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程并行执行不同的任务。由于线程是操作系统直接支持的执行单元,因此,高级语言(如Python、Java等)通常都内置多线程的支持。Python的标准库提供了两个模块:_thread和threading,_thread

    2022年8月31日
    7
  • 为博客添加樱花飘落的效果

    为博客添加樱花飘落的效果偶然看见别人博客中樱花飘落的效果 感觉很棒 于是我也给博客加上了樱花 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传新建 sakura js 新建一个 sakura js 文件 在里面填入下面的代码 代码来自于折月 sBlog 在此表示感谢 varstop staticx varimg newImage img src data ima

    2026年3月16日
    1
  • Deepseek本地部署教程模型怎么选择?按需选择让效率翻倍

    Deepseek本地部署教程模型怎么选择?按需选择让效率翻倍

    2026年3月16日
    2
  • ctf get post 传参 HackBar

    ctf get post 传参 HackBarget和post是http协议的两种基本请求方式GET-从指定的资源请求数据。POST-向指定的资源提交要被处理的数据https://www.w3school.com.cn/tags/html_ref_httpmethods.asp知乎上这篇更详细,关于get和post的区别https://www.zhihu.com/question/28586791web题中会遇到,比如…

    2022年5月20日
    32
  • linux下连接mysql数据库命令,linux连接mysql命令[通俗易懂]

    linux下连接mysql数据库命令,linux连接mysql命令[通俗易懂]linux连接mysql是最基本的操作之一,对于初学者来说我们可以通过命令来连接mysql,下面由学习啦小编为大家整理了linux下连接mysql命令的相关知识,希望对大家有所帮助!linux连接MYSQL命令格式:mysql-h主机地址-u用户名-p用户密码linux连接mysql命令实例1、连接到本机上的MYSQL找到mysql的安装目录,一般可以直接键入命令mysql-uroot…

    2025年11月29日
    7
  • 无法连接到服务器。错误代码 0x80072EFD

    无法连接到服务器。错误代码 0x80072EFD我遇到的是 win 便笺无法同步信息 win 商店打不开也会报这个错误 这个错误代码 0x80072EFD 造成账号登录不上 无法同步等之类的问题 原因 就是 VPN 代理的锅 它自己使用自动配置脚本了 配置了 但没有用 狗狗还是打不开 PS 同样这个方法也可以解决 InternetExpl 无法打开网页 推荐 解决方法 打开 InternetExpl 小齿轮图标 Internet

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号