Z数组和螺旋数组

PAT数组-13. 螺旋方阵(20) 数组-13. 螺旋方阵(20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 所谓“螺旋方阵”,是指对任意给定的N,将1到N*N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入NxN的方阵里。本题要求构造这样的螺旋方阵。 阅读详情

Z数组:

#include<stdio.h>
#include<stdlib.h>
void fun(int n){
    /*动态创建二维数组*/
    int **a = (int **)malloc(n*sizeof(int*));
    if(a==NULL)
        return;
    int i,j;
    for(i=0;i<n;i++)
        a[i] = (int*) malloc(n*sizeof(int));
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            int k = i + j;
            if(k<n){
                int sum = k*(k+1)/2;
                int index;
                index = (k%2==0)? j : i ;
                a[i][j] = sum  + index;
            }else{
                int t = 2*n-1-k;
                int sum = (1+t)*t/2;
                sum = n*n-1-sum;
                int index = (k%2==0) ? (n-i) : (n-j);
                a[i][j] = sum + index;
            }
        }
    }

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

    /*释放*/
    for(i=0;i<n;i++)
        free(a[i]);
    free(a);

    return;
}


int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",n);
    while(n!=0){
        fun(n);
        scanf("%d",&n);
        printf("%d\n",n);
    }
    return 1;
}


螺旋数组:

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

void fun(int n){
    //动态创建二维数组
    int **arry = (int **)malloc(n*sizeof(int*));
    if(arry==NULL)
        return;
    int i,j;
    for(i=0;i<n;i++)
        arry[i] = (int*) malloc(n*sizeof(int));
    //螺旋数组
    int k=0,a=1;
    i=j=0;
    for(;k<(n+1)/2;k++){
        while(j<n-k) arry[i][j++] = a++; i++; j--;
        while(i<n-k) arry[i++][j] = a++; i--; j--;
        while(j>=k)  arry[i][j--] = a++; i--; j++;
        while(i>k)   arry[i--][j] = a++; i++; j++;
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            printf("%d\t",arry[i][j]);
        printf("\n");
    }

    //释放内存
    for(i=0;i<n;i++)
        free(arry[i]);
    free(arry);

    return;
}

int main(){
    int n;
    scanf("%d",&n);
    while(n!=0){
        fun(n);
        scanf("%d",&n);
    }
    return 1;
}


Carla-编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集? 编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?不妨看看这个! 阅读详情

相关推荐

全功能tgbot/Telegram机器人多功能有后台版源码

trx兑换 闪兑 关键字监控 群管 usdt监控 余额查询 推广分享 等几乎常见的tg机器人功能都有。全功能tgbot/telegram机器人多功能有后台版源码-打包好的可以直接上手。

百创科技 2643

(超简单、超易懂、超详细)算法精讲(二十八): Z算法

Z算法是一种用于字符串匹配的线性时间算法。它可以在O(n+m)的时间复杂度内,在一个给定的文本串T一个模式串P中,找到所有匹配的位置。Z算法的基本思想是维护一个称为Z数组的辅助数组,其中Z[i]表示以字符串T中的第i个字符为起始位置与模式串P的匹配长度。通过逐个字符比较模式串文本串中的字符,可以计算出Z数组。Z数组的计算过程分为两个阶段:初始化阶段迭代计算阶段。

Malex2024的博客 1395

2018电工杯-电动汽车充放电优化管理(数据文档、代码介绍)

2018电工杯-电动汽车充放电优化管理(数据文档、代码介绍)

字符串模式匹配:Z 算法

数组的辅助数组来工作。现在,当我们用一个附加字符将模式连接到我们的原始字符串时,基本上我们将新创建的字符串的前缀(即我们的模式)与字符串的其余部分(即要搜索的字符串)匹配。,我们首先将搜索模式要搜索的字符串连接在一起,在两者之间添加另一个字符,该字符在任何字符串中都不存在。个字符,这也是我们的模式。正如我们在示例中看到的,我们已经将模式字符串连接在一起,中间有一个附加字符,这两个字符都不存在。由于我们添加了一个在任何字符串中都不存在的附加字符,因此我们确信永远不会找到比我们的模式更长的字符串。

新华编程特战队 1398

【数据结构与算法】Z算法(扩展KMP)(C++Python写法)

Z算法(扩展KMP)

小雨的分享斋 1279

PTA C语言实现螺旋方阵

解决PTA的螺旋方阵问题

fresher10086的博客 1669

PTA作业 螺旋数组

/count的作用是实现螺旋中12345递增,与下文的count++一起实现。//如果n是奇数,最中间的那个数要自己输入。#include<stdio.h>//我用的是一层一层将1,2,3......放入数组最后输出的方法。i++)//这边可以用特殊值理解,例如输入5要螺旋3层。//定义1000是因为数组不能用变量定义。//注意需要换行(每n个。

Fierce777的博客 90

python–leetcode–数组之形状变化

python–leetcode–数组之形状变化 6.Z字形变换 Z字形变换:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 思路:根据给定行数构建默认行数空串,根据z字型变换,设置flag方向,到达临界转换方向,添加到默认空串中,最后再进行拼接。 def convert(s: str, numRows: int): if numRows < 2: return s res = ['' for _ in range(numRows)] i

weixin_44332995的博客 221

数组骚操作(未完待续)

预处理的意思就是在常规的遍历中,先计算某些需要的数据,而不是等到遍历每个点,再去计算一次。 1582. 二进制矩阵中的特殊位置 力扣传送门 思路一:预处理 对于特殊位置,需要保证该点所在的行,所在列的其它位置都是0,相当于行的元素之、列的元素之都为1。最容易想到的就是遍历到为1的点,就去判断该点所在的行列是否符合,但这样对于同一行或者同一列的点,我们就要重复计算好多次。所以我们可以先计算并保存每一行、每一列的元素之,在遍历判断时就可以直接读取保存的值,预处理使得每一行每一列只需计算一次。 cla

qq_45833812的博客 580

【力扣LeetCode热题h100】子串、普通数组、矩阵

本文总结了LeetCode热题中的子串相关题目,包括滑动窗口前缀等解法。重点介绍了三个典型问题:1)为K的子数组,通过前缀+哈希表统计满足条件的子数组个数;2)滑动窗口最大值,使用优先队列或单调队列高效获取每个窗口的最大值;3)最小覆盖子串,通过滑动窗口哈希表寻找覆盖目标字符串的最小子串。这些题目考察了数组处理、滑动窗口优化等技巧,在笔试面试中频繁出现,具有重要参考价值。

qq_41725967的博客 414

球球速刷LC之数组 三轮

旋转矩阵 技巧是先将矩阵按对角线交换,在翻转每一行 void swap(int &a , int &b) { int temp = a; a =b; b = temp; } void reverse(vector<int>&array) { int i = 0; int j =array.size()-1; while(i < j) { swap(array[i] , array[j]);

tianming1992的专栏 289

力扣(LeetCode)刷题,简单+中等题(第33期)

力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

不脱发的程序猿 2万+

LeetCode 热题 100 Python3易懂题解(普通数组,矩阵)

给你一个整数数组nums,请你找出一个具有最大的连续子数组(子数组最少包含一个元素),返回其最大。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的最大,为 6。nums = [1]123这个太简单了,洛谷的p1115一样,那个用c++写了题解可以去主页看。不要想得太复杂!!!

qq_51652391的博客 846

LeetCode 热题 100 | 矩阵

重点:1.思路:1.

Triple_3的博客 601

今日矩阵系列

思想:用两个数组来标识需要置为0的行列将标识的位置0空间复杂度O(m+n)

qq_59259601的博客 450

2025年12月1日力扣刷题小记

本文记录了2025年12月1日在力扣平台刷题的五个算法题解:数组题"下一个排列",通过查找交换点反转实现;链表题"螺旋矩阵IV",按螺旋顺序填充链表值;字符串题"Z字形变换",两种实现方式;栈题"商品折扣价",利用栈结构计算最终价格;队列题"招式拆解II",使用哈希表统计字符频率。每道题都包含详细思路说明完整代码实现,涵盖了数组处理、链表遍历、字符串变换、栈应用哈希表使用等常见算法技巧。

su17643217590的博客 625

【JAVA算法|hot100】矩阵类型题目详解笔记

本文记录了四道矩阵相关算法题的解题思路代码实现。73题通过辅助数组标记零元素位置后修改原矩阵;54题使用方向数组模拟顺时针螺旋遍历;48题利用坐标变换规律实现原地90度旋转;240题从左下角开始利用行列有序特性进行高效搜索。每道题都包含解题关键思路核心代码实现,重点掌握矩阵遍历、方向控制、坐标变换等技巧。

2303_80850235的博客 412

小鸡玩算法-力扣HOT100-矩阵

力扣HOT100-java-矩阵(矩阵置零、旋转矩阵、旋转图像、搜索二维矩阵||)

suo57Kn的博客 175

c++螺旋数组

力扣打卡

QYJ_2397004022的博客 942

螺旋矩阵(java)

输出螺旋矩阵螺旋方阵示例代码部分 螺旋方阵 输出螺旋方阵,采用二维数组存储。螺旋方阵将从1开始的自然数由方阵的最外圈向内螺旋方式的顺序排列。 示例 代码部分 package juju0921; import java.util.Scanner; public class Juju { public static void main(String[] args) { int i=0,j=0;...

sea_r的博客 1851
上一篇: 反转单向链表
下一篇: 求一个字符串中连续出现次数最多的字串.[面试宝典14.5节]
juiceda
博客等级 码龄17年 10粉丝 22原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值