c语言之螺旋数组

  1. c语言之螺旋数组
  2. 前言
  3. 螺旋数组的编写
    1. 开始之顺时针
    2. 开始之逆时针

c语言之螺旋数组

前言

我看到很多回忆题目都写了螺旋数组,20年之前是没有的,所以我们现在学习一下c语言中的螺旋数组,分为四种。

按方向分,分为顺时针和逆时针。按起始顺序分,分为中间开始(太难了,以前的也没考过从中间开始的)和开头开始。排列组合后分为四种。

我一定要成功!!考研真的太痛苦了,不想来第二遍了,整个人的生活都停下来了,就为了这么个东西,太太太太太太太烦人了,现在越来越想躺平了,要是以后生活都这么痛苦的话我都不知道怎么活😋。

螺旋数组的编写

开始之顺时针

image-20231009182256595

用这种方式的螺旋数组,在看了思路之后,我会尝试自己写出螺旋数组。

#include <stdio.h>



int main(){
    int arr[5][5];//定义一个5x5的数组
    int a=0, b=4,c=4,d=0;//定义了4个边界
    //其中a为上边界,b为右边界,c为下边界,d为左边界
    int item = 1;//定义一个元素,用来给数组赋值
    while (a<=c&&d<=b) {
        //上行
        for (int i = d; i <= b; i++) {
            arr[a][i] = item;
            item++;
        }
        a++;//上边界缩小

        //右列
        for (int i = a; i <= c; i++) {
            arr[i][b] = item;
            item++;
        }
        b--;//右边界缩小

        //下行
        for (int i = b; i >= d; i--) {
            arr[c][i] = item;
            item++;
        }
        c--;//下边界缩小

        //左列
        for (int i = c; i >= a; i--) {
            arr[i][d] = item;
            item++;
        }
        d++;//左边界缩小
    }

    //输出数组
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            printf("%3d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

image-20231009185741343

w芜湖,其方法就是,不断收缩边界,达到边界的时候转为下一个边界即可。

开始之逆时针

国服逆时针!

image-20231009190321828

#include <stdio.h>



int main(){
    int arr[5][5];//定义一个5x5的数组
    int shang = 0, zuo = 0, you = 4, xia = 4;//定义国服边界
    int item = 1;//定义一个元素,用来给数组赋值
    while (shang <= xia && zuo <= you) {//国服条件
        //左列
        for (int i = shang; i <= xia; i++) {
            arr[i][zuo] = item;
            item++;
        }
        zuo++;

        //下行
        for (int i = zuo; i <= you; i++) {
            arr[xia][i] = item;
            item++;
        }
        xia--;

        //右列
        for (int i = xia; i >= shang; i--) {
            arr[i][you] = item;
            item++;
        }
        you--;

        //上行
        for (int i = you; i >= zuo; i--) {
            arr[shang][i] = item;
            item++;
        }
        shang++;
    }
    //输出数组
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            printf("%3d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

image-20231009191150189

我还专门改成偶数了,这个代码同样是有用的。

image-20231009192033123


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。