美文网首页
C语言 螺旋数组矩阵

C语言 螺旋数组矩阵

作者: 道阻且长_行则将至 | 来源:发表于2019-08-18 00:47 被阅读0次

题目挺有意思 用笨方法写了写

#include <stdio.h>
#include <math.h>
#include <malloc.h>

void chushi();
int **hui(int n);

int main(int argc, char const *argv[])
{

    int n = 0;
    printf("input number:\n");
    scanf("%d", &n);
    int r = ceil(sqrt(n));

    int **b = hui(n);
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < r; j++)
        {
            printf("%5d ", *((int *)b + r * i + j));
        }
        printf("\n");
        printf("\n");
    }

    return 0;
}

// 逆时针旋转 第一遍
void chushi()
{
    int n = 36;
    int r = ceil(sqrt(n));
    int nums[n][n];

    for (int x = 0; x < n; x++)
    {
        for (int y = 0; y < n; y++)
        {
            nums[x][y] = 0;
        }
    }

    int j = r / 2;
    int k = r / 2;

    int f = 2;

    int i = 1;
    int c = 1;

    while (1)
    {
        for (int l = 0; l < f; l++)
        {
            nums[j][k] = i;

            i++;
            k += c;

            if (i == n + 1)
            {
                for (int x = 0; x < n; x++)
                {
                    for (int y = 0; y < n; y++)
                    {
                        printf("%3d", nums[x][y]);
                    }
                    printf("\n");
                }
                return 1;
            }
        }
        k -= c;
        i--;

        for (int l = 0; l < f; l++)
        {
            nums[j][k] = i;

            i++;
            j -= c;

            if (i == n + 1)
            {
                for (int x = 0; x < n; x++)
                {
                    for (int y = 0; y < n; y++)
                    {
                        printf("%3d", nums[x][y]);
                    }
                    printf("\n");
                }
                return 1;
            }
        }
        j += c;
        i--;

        f++;
        c = -c;
    }
}

// 逆时针旋转 第二遍
int **hui(int n)
{
    // 半径和初始坐标
    int r = ceil(sqrt(n));
    int j = r / 2;
    int k = r / 2 + r % 2 - 1;

    // 初始化
    int **nums = (int **)malloc(n * sizeof(int *));
    for (int i = 0; i < r; i++)
    {
        nums[i] = (int *)malloc(n * sizeof(int));
    }
    for (int x = 0; x < r; x++)
    {
        for (int y = 0; y < r; y++)
        {
            *((int *)nums + r * x + y) = 0;
        }
    }

    int f = 2; // 从2个开始循环

    int i = 1; // n从小到大

    int c = 1; // 符号转换器

    while (1)
    {
        for (int l = 0; l < f; l++)
        {
            *((int *)nums + r * j + k) = i;

            i++;
            k += c;

            if (i == n + 1)
            {
                return nums;
            }
        }
        k -= c;
        i--;

        for (int l = 0; l < f; l++)
        {
            *((int *)nums + r * j + k) = i;

            i++;
            j -= c;

            if (i == n + 1)
            {
                return nums;
            }
        }
        j += c;
        i--;

        f++;
        c = -c;
    }
}

相关文章

  • C语言 螺旋数组矩阵

    题目挺有意思 用笨方法写了写

  • C语言 矩阵螺旋输出 解法

    C语言算法题 给定一个 m行、n列的矩阵,请按照顺时针螺旋的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体...

  • 每周一道算法题(四十一)

    本周题目难度级别'Medium',使用语言C 题目:给你一个矩阵(C里面就是二维指针),让你螺旋式遍历。eg:给你...

  • numpy -- 基础

    1 Numpy 什么是Numpy数学库,c语言和Python语言混合, NumPy 主要用于大量的维度数组与矩阵运...

  • numpy 使用汇总

    1. numpy简单介绍 numpy 是采用c语言编写,相对python自带的list数组,好处是采用的矩阵运算,...

  • Python实现螺旋矩阵

    螺旋矩阵 什么是螺旋矩阵? 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大...

  • C语言数组的升维与降维之说

    C语言数组的升维与降维之说 C语言数组的升维 C语言数组的降维

  • C语言二维数组,二级指针与动态内存分配(1)

    今天遇到一个C语言实现判断任意大小矩阵(二维数组)是否为单位矩阵的题目,要求第一个参数为整型指针,第二个参数为矩阵...

  • R语言矩阵与数组2021.1.24

    总结一句,放在开头:R语言中的向量更像是数组,而数组更像是矩阵 。 矩阵 矩阵(Matrix)是一个按照长方阵列排...

  • First week can't solve.

    螺旋数组 这道题让我们搓一个螺旋丸,将一个矩阵按照螺旋顺序打印出来,我们只能一条边一条边的打印,首先我们要从给定的...

网友评论

      本文标题:C语言 螺旋数组矩阵

      本文链接:https://www.haomeiwen.com/subject/bxmlsctx.html