C语言_螺旋输出

/*

 输入2

 1 2

 4 3

 

 输入3:

 1 2 3 4

 12 13 14 5

 11 16 15 6

 10 9 8 7

 

 输入5

 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

 

 输入6

 1 2 3 4 5 6

 20 21 22 23 24 7

 19 32 33 34 25 8

 18 31 36 35 26 9

 17 30 29 28 27 10

 16 15 14 13 12 11

 */


#include "xunhuan.h"


void xunhuan()

{

    int n,i,j,k=0;

    printf("输入n:");

    scanf("%d",&n);

    int mat[n][n];

    for (i=0;i<(n+1)/2;i++)//确定在奇数情况下循环能处理最后那个值

    {

        for (j=i;j<=n-i-1;j++)//123mat[不变][加一]

            mat[i][j] = ++k;//为什么要用++k 因为k=0 如果不先加那么 0就会赋给数组 n-i-1确定第一边界

        

        for (j=i+1;j<=n-i-1;j++)//45 确定mat[不变][最后一个值] j+1是因为mat[0][4]已经有值了

            mat[j][n-i-1] = ++k;

        

        for (j=n-i-2;j>=i;j--)//为什么用递减 因为数组是从0开始到最边界3因为4已经有值了,又因为数值是从小到大 为什么用n-i-2因为mat[4][4]有值了

            mat[n-i-1][j] = ++k;//确定76 mat[不变][递减]

        

        for (j=n-i-2;j>=i+1;j--)//8 循环1 位置i+1是跳过最下面的元素  n-i-2不对上层元素做处理

            mat[j][i] = ++k;//为什么用n-i-2因为mat[4][0]有值了,i+1等到还剩多少个值

    }

    for (i=0;i<n;i++)

    {

        for (j=0;j<n;j++)

            printf("%d\t",mat[i][j]);

        printf("\n");

    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值