• 螺旋数组,之字形数组


    //螺旋数组

    #include<iostream> using namespace std; //生成一个n*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 */ void spiral_array(int **a,int n) { /*for (int i = 0; i < n; i++) { for(int j = 0; j < n; j++) printf("%d ",a[i][j]); printf(" "); }*/ int terminated = n/2; int m = 1; for (int i = 0; i < terminated; i++) { for (int j = 0; j < n-i; j++) { if (a[i][j] == 0) { a[i][j] = m++; } } for (int j = i+1; j<n-i; j++) { if (a[j][n-i-1]==0) { a[j][n-i-1]=m++; } } for (int j = n-i-1; j > i; j--) { if (a[n-i-1][j]==0) { a[n-i-1][j]=m++; } } for (int j = n-i-1; j>i; j--) { if (a[j][i]==0) { a[j][i]=m++; } } if (n%2==1) { a[terminated][terminated]=m; } } } int main() { int **a; int n; printf("请输入数组的维数:"); scanf("%d",&n); //二维数组动态内存分配 a = (int **)malloc(sizeof(int*)*n); for (int i = 0; i < n; i++) { a[i] = (int *)malloc(sizeof(int)*n); for(int j = 0; j < n; j++) a[i][j] = 0; } spiral_array(a,n); printf("螺旋数组: "); for (int i = 0; i < n; i++) { for(int j = 0; j < n; j++) printf("%d ",a[i][j]); printf(" "); } //释放内存 for (int i = 0; i < n; i++) { free(a[i]); } free(a); return 0; }

     之字形数组

    /*
    实现一个之字形数组 ,从1 开始,之字形形成数组
    
    1  3  4  10
    2  5  9  11
    6  8  12 15
    7  13 14 16
    
    */
    
    #include<stdio.h>
    #include <stdlib.h>
    //using namespace  std;
    
    
    void constructArray(int **array,int N)
    {
        //说明,方向坐标,每两个单位表示一个反向,
        //一共四个方向,比如
        //direction[0]、direction[1]表示第一个方向的x 和 y的走向
        //direction[2]、direction[3]表示第二个方向的x 和 y的走向
        //direction[4]、direction[5]表示第三个方向的x 和 y的走向
        //direction[6]、direction[7]表示第四个方向的x 和 y的走向
        int direction[8]={1,0,-1,1,0,1,1,-1};
    
        int row = 0, col = 0;
        bool changeDirec = false;
        int index = 1;
        array[row][col] = index;
        while(1)
        {
            for(int i = 0; i < 4; i++)
            {
                if (row == N-1 && col == N-1)//最后一个位置跳出
                    break;
                if(row == N-1 && N%2==1 && changeDirec==false)//奇数行换方向
                {
                    
                    direction[0]=0;
                    direction[1]=1;
                    direction[2]=-1;
                    direction[3]=1;
                    direction[4]=1;
                    direction[5]=0;
                    direction[6]=1;
                    direction[7]=-1;
                    changeDirec = true;
                    break;
                }
                if(col == N-1 && N%2==0 && changeDirec==false)//偶数行换方向
                {
                    
                    direction[0]=1;
                    direction[1]=0;
                    direction[2]=1;
                    direction[3]=-1;
                    direction[4]=0;
                    direction[5]=1;
                    direction[6]=-1;
                    direction[7]=1;
                    changeDirec = true;
                    break;
                }
                if (changeDirec==false)
                {
                    if (i%2==0)
                    {
                        row += direction[2*i];
                        col += direction[2*i+1];
                        array[row][col] = ++index;
                    }
                    else
                    {
                        while(1)
                        {
                            if ((direction[2*i]+row)<0 || (col+direction[2*i+1])<0 
                                || (direction[2*i]+row)>=N || (col+direction[2*i+1])>=N)break;//越界判断
                            row += direction[2*i];
                            col += direction[2*i+1];
                            array[row][col] = ++index;
                        }
                    }
                }else 
                {
                    if (i%2==0)
                    {
                        row += direction[2*i];
                        col += direction[2*i+1];
                        array[row][col] = ++index;
                    }
                    else
                    {
                        while(1)
                        {
                            if ((direction[2*i]+row)<0 || (col+direction[2*i+1])<0 
                                || (direction[2*i]+row)>=N || (col+direction[2*i+1])>=N)break;//越界判断
                            row += direction[2*i];
                            col += direction[2*i+1];
                            array[row][col] = ++index;
                        }
                    }
                }
            }
            if (row == N-1 && col == N-1)
            break;
            
        }
    
    
    
    }
    
    
    int main()
    {
    
        int **array;
        int N;
        printf("请输入数组N*N的维数N:
    ");
        scanf("%d",&N);
        //内存分配
        array = (int **)malloc(N*sizeof(int *));
        if (array == NULL)
        {
            return -1;
        }
        for (int i = 0; i < N; i++)
        {
            array[i] = (int *)malloc(N*sizeof(int));
            if(array[i]==NULL)return -1;
        }
    
    
        //初始化
        for(int i = 0; i < N; i++)
        for(int j = 0; j < N; j++)
        {
            array[i][j] = 0;
        }
    
        constructArray(array,N);
    
    
        for(int i = 0; i < N; i++)
        {
            for(int j = 0; j < N; j++)
            {
                printf("%d ",array[i][j]);
            }
            printf("
    ");
        }
        //内存释放
        for (int i = 0; i < N; i++)
        {
            free(array[i]);
        }
        free(array);
    
        return 0;
    }
  • 相关阅读:
    CSS自动控制图片大小的代码
    JS 判断 Radio 单选按钮是否为选中状态 并弹出 值信息
    [转]eclipse github 提交代码
    WEB 开发工具分享
    javaShop的一些总结
    前端进阶试题(css部分)
    如何判断浏览器 然后针对不同的浏览器加入单独的样式
    jquery 提示信息显示后自动消失的具体实现
    html a标签 图片边框和点击后虚线框的有关问题
    html 包含一个公共文件
  • 原文地址:https://www.cnblogs.com/newpanderking/p/3906862.html
Copyright © 2020-2023  润新知