蛇形矩阵 和螺旋矩阵

1.蛇形方阵:

          1  2  3

          6  5  4

          7  8  9

外层控制层数,内层根据列数控制方向:0 则往右走   N-1则往左走

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 100
int a[SIZE][SIZE];

int main(int argc, const char *argv[])
{
    int dim = atoi(argv[1]);
    int i, j, k, lev;
    int num =0;
    j = 0;
    for(lev = 0; lev < dim; lev++)
    {
        if(j == 0)
        {
            while(j < dim)
                a[lev][j++] = ++num;
            j--;
            a[lev+1][j] = num;
        }
        else if(j == dim-1)
        {
          while(j >= 0)   
              a[lev][j--] = ++num;
          j++;
         a[lev+1][j] = num;  
        }
    }

    for(i = 0; i < dim; ++i)
    {
     for(j = 0; j < dim; ++j)
             printf("%-4d", a[i][j]);
      printf("\n");
    }
    return 0;
}


2.螺旋方阵

     1      2      3       4

     12   13     14     5 

     11   16     15     6

     10    9     8        7

方法:根据数字或者圈数来控制外层循环,内层循环还是控制四个方向

根据数字:   

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
int a[SIZE][SIZE];//全局变量,数组未初始化,元素为0

int main(int argc, const char *argv[])
{
    int dim = atoi(argv[1]);
    int x, y, count;
    x = y = count = 0;
    a[0][0] = 1;
    count++;
    while(count < dim * dim)
    {
        while(y < dim - 1 && a[x][y+1] == 0 )
            a[x][++y] = ++count;
        while(x < dim - 1 && a[x+1][y] == 0)
            a[++x][y] = ++count;
        while(y > 0 && a[x][y-1] == 0)
            a[x][--y] = ++count;
        while(x > 0 && a[x-1][y] == 0)
            a[--x][y] = ++count;
    }
    for(x = 0; x < dim; ++x)
    {
        for(y = 0; y < dim; ++y)
            printf("%-4d", a[x][y]);
        printf("\n");
    }
    return 0;
}


根据圈数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
int a[SIZE][SIZE];

int main(int argc, const char *argv[])
{
    int dim = atoi(argv[1]);
    int i,j;
    int index_x;
    int left_up, right_down;
    int circle = dim % 2 ? dim / 2 +1 : dim / 2;
    int num = dim*dim +1;
    for(index_x = 0; index_x < circle; index_x++)
    {
        left_up = index_x;//左上角
        right_down = dim - left_up -1;//右下角
        for(i = left_up, j = left_up; j < right_down; ++j)
            a[i][j] = --num;
        for(i = left_up, j = right_down; i < right_down; ++i)
            a[i][j] = --num;
        for(i = right_down, j = right_down; j > left_up; --j)
            a[i][j] = --num;
        for(i = right_down, j = left_up; i > left_up; --i)
            a[i][j] = --num;
    }
    for(i = 0; i < dim; ++i)
    {
        for(j = 0; j < dim; ++j)
            printf("%-4d", a[i][j]);
        printf("\n");
    }

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值