c语言实现输出二维蛇形矩阵_二维数组实现蛇形矩阵_风尘璞的博客-程序员秘密

技术标签: c语言  


    #include <malloc.h>  
    #include <stdio.h>  
      
    int main(void)  
    {  
        //用户输入的值,创建n*n的矩阵  
        int n;  
        //蛇形从1开始计数  
        int count = 1;  
        //a[x][y],x是二维数组的第一个下标,y是第二个。  
        //round是蛇形矩阵的第几圈,从0开始。  
        int x,y,round;  
      
        scanf("%d",&n);   
        int (*a)[n] = calloc(n*n,sizeof(int));  
          
        //如果n是1,则直接输出。  
        if(n == 1){  
            a[0][0] = count;  
        }else{  
        //下面以n=5为例  
        //一共有2(5/2)圈蛇形  
        for(round=0; round<n/2; round++){  
            /* 以下循环执行后输出如下: 
                1 2 3 4 5 
            */  
          
            x = round;  
            for(y=round;y<n-round;y++){  
                a[x][y]=count;  
                count++;  
            }  
            /* 以下循环执行后输出如下: 
                1 2 3 4 5 
                        6 
                        7 
                        8 
            */  
            y = n - round - 1;  
            for(x=round+1;x<n-round-1;x++){  
                a[x][y]=count;  
                count++;  
            }  
              
            /* 以下循环执行后输出如下: 
                1  2  3  4  5 
                            6 
                            7 
                            8 
                13 12 11 10 9    
            */  
            x = n - round - 1;  
            for(y=n-round-1;y>=round;y--){  
                a[x][y]=count;  
                count++;  
            }  
              
            /* 以下循环执行后输出如下: 
                1  2  3  4  5 
                16          6 
                15          7 
                14          8 
                13 12 11 10 9 
            */  
            y = round;  
            for(x=n-round-1-1;x>round;x--){  
                a[x][y]=count;  
                count++;  
            }  
        }  
        /* 上面的大循环执行后输出如下: 
                1  2  3  4  5 
                16 17 18 19 6 
                15 24    20 7 
                14 23 22 21 8 
                13 12 11 10 9 
            */  
        if(n%2 == 1){  
            //如果n值奇数,将最中间的空填上  
            a[n/2][n/2] = count;  
        }  
        }  
        //打印矩阵  
        for(x=0;x<n;x++){  
            for(y=0;y<n;y++){  
                printf("%d ",a[x][y]);  
            }  
            printf("\n");  
        }  
        printf("\n");  
      
        free(a);  
        return 0;  
    }  


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_35534327/article/details/53415517

智能推荐

c语言三元运算符比大小,c语言三元运算符_C中的三元运算符解释_大Victor的博客-程序员秘密

c语言三元运算符Programmers use the ternary operator for decision making in place of longer if and else conditional statements.程序员使用三元运算符代替较长的if和else条件语句进行决策。The ternary operator take three arguments:三元运算符采用三...

论文略读 | Dialog-to-Action: Conversational Question Answering Over a Large-Scale Knowledge Base_sanra123的博客-程序员秘密

来源: 2018 NIPS–微软亚洲研究院参考:https://www.msra.cn/zh-cn/news/features/nips-2018-papers-from-msra1. 文章概述:对话中的多轮问答和语义分析是NLP领域两个核心问题,对语音助手、聊天机器人和搜索引擎都至关重要。在本文中,我们提出了基于知识图谱的对话式语义分析模型。(有点没想通复制了之前的KB实体之后呢?就是复制...

android 查看内存使用情况_haima1998的博客-程序员秘密

对android 内存分析比较好的Blog:1.http://blog.csdn.net/gemmem/article/details/8920039   主要介绍1、进程的地址空间。2、进程内存空间和RAM之间的关系。3、Android中的进程。4、Android中进程的堆内存。5、Android的 java程序为什么容易出现OOM。6、Android如何应对RA

frida hook java和so层函数常用脚本_frida hook脚本_william~的博客-程序员秘密

逆向时用frida hook java层相对比较简单,找准hook点用objection就行!或则自己写脚本hook java常见的加密/编码也很简单,核心原因就是类名、函数名称得以保留,逆向人员能快速定位!java层常见的加密/编码hook脚本这里有:https://www.cnblogs.com/theseventhson/p/14852458.html ; java层的解决了? so层怎么办了? 因为so层用c/c++写的,编译后的release版本把变量名、函数名都去掉了,加密/编码算法单从名称上.

MBSE建模学习之七:用例和用例图的说明_用例说明_gsuner的博客-程序员秘密

本文介绍SysML中用例图中的基本概念,以及应用示例

随便推点

二维码url中汉字传参,导致查询不到结果,结果为编码所引起_anli7767的博客-程序员秘密

1、正常经过应该是扫描页面中的二维码,打开url,系统根据url中参数查询出结果,没有汉字,一切正常;2、之后参数中加入汉字,找不到结果了;2、网站页面经过混淆,无从查找原因,然后找到生成二维码的文件qrcode.asp;3、发现文件中url经过了encodeURIComponent(url)(utf8编码),但网站中所有页面编码统一为gb2312,从而引起汉字乱码无法查询出...

C++ pair的用法_&Mr.Gong的博客-程序员秘密

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pair 类型的定义 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、Pair 类型概述pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的

os.path.abspath(__file__)和os.path.split(path)_os.path.split(os.path.abspath(__file__))_heimao0307的博客-程序员秘密

#coding:utf-8import osdef get_abspath(): print(__file__) a = os.path.abspath(__file__) print(os.path.split(a)) print(os.path.split(a)[0]) print(os.path.split(a)[1]) print(o...

linux find查找文件并删除文件,Linux find 查找 并删除文件 杀掉进程_隔壁的六叔叔的博客-程序员秘密

find 默认在当前 即 . 目录下查找du 文件名 / 目录  # 查看文件占用内存大小1. 按照文件名查找find / -name qwe  # qwe为文件名find / -name *qwe*  # * 为模糊匹配2. 按照文件类型查找find / -type d  # 查找目录文件find / -type f  # 查找普通文件find / -type l  # 查找链接文件3. 查到文...

c语言if多条件并列_C/C++编程笔记:C语言预编译指令—条件编译,零基础推荐收藏_weixin_39933356的博客-程序员秘密

一、 内容概述本文主要介绍c语言中条件编译相关的预编译指令,包括#define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined。二、条件编译条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。最常见的条件编译是防止重复包含头文件的宏,形式跟下面代码类似:1 #ifndef ABC...

oracle存储过程定义json,在oracle中使用json_zy2752639565的博客-程序员秘密

有没有一种简单的方法可以在Oracle中使用JSON?我有一个经常用于调用Web服务的标准过程,JSON是我在Web开发上下文中熟悉的一种格式,但是在存储过程中使用JSON的最佳方法是什么?例如,从URI中获取CLOB响应,将其转换为JSON对象并从中获取值?作为参考,这是我用来获取URL的过程create or replace procedure macp_URL_GET(url_resp in...

推荐文章

热门文章

相关标签