二维数组经典题型---环形数组和蛇形矩阵(Java)

news2024/11/15 13:55:57

文章目录

  • 前言
  • 1.环形数组
    • 1.1.题目
    • 1.2.题目分析
    • 1.3.代码展示
    • 1.4.不足
  • 2.[蛇形矩阵](https://ac.nowcoder.com/acm/problem/22231)
    • 2.1.题目
    • 2.2.题目分析
    • 2.3.代码展示
  • 总结


前言

每日一题—第四届上海理工大学程序设计全国挑战赛 —环形数组


1.环形数组

1.1.题目

在这里插入图片描述

这道题跟牛客网网上的蛇形矩阵相类似,再讲完上述题之后,咱们在讲蛇形矩阵。

1.2.题目分析

首先要定义四个变量,分别是top,bottom,left,right。
然后根据题目意思,进行赋值

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

然后最外层的已经填充完了,在进行新的循环,循环结束的标志是top <= bottom && left <= right。

1.3.代码展示

/*
链接:https://ac.nowcoder.com/acm/contest/79877/K
来源:牛客网

Cai_Guang 定义环形数组为从矩阵左上角开始顺时针围绕当前矩阵最外层蛇形填数的数组,如图为一个 4∗5 的环形数组。
输入描述:
一行两个整数n,m,代表这个矩阵的行数,列数
输出描述:
输出n行,每行m个一个空格隔开的整数。嗲表你的答案矩阵
示例1
输入
4 5
输出
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
 */
import java.util.Scanner;

public class Main {
    public static void FillMatrix(int[][] matrix, int n, int m) {
        int top = 0, left = 0, right = m - 1, bottom = n - 1;
        int cnt = 1;
        while (top <= bottom && left <= right) {
            // 填充上边界
            for (int i = left; i <= right; i++) {
                matrix[top][i] = cnt++;
            }
            top++;

            // 填充右边界
            if (top <= bottom) { // 确保没有越界
                for (int i = top; i <= bottom; i++) {
                    matrix[i][right] = cnt++;
                }
                right--;
            }

            // 填充下边界
            if (left <= right) { // 确保没有越界
                for (int i = right; i >= left; i--) {
                    matrix[bottom][i] = cnt++;
                }
                bottom--;
            }

            // 填充左边界
            if (top <= bottom) { // 确保没有越界
                for (int i = bottom; i >= top; i--) {
                    matrix[i][left] = cnt++;
                }
                left++;
            }
        }
    }
    public static void PrintMatrix(int[][]matrix,int n,int m){
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        int[][]matrix=new int[n][m];
        FillMatrix(matrix,n,m);
        PrintMatrix(matrix,n,m);
        sc.close();
    }
}

1.4.不足

通过率只有42.86%,有没有大佬帮忙指点一二


2.蛇形矩阵

2.1.题目

在这里插入图片描述

2.2.题目分析

这道题闭上道题略微简单,
记住这里所说的所有边界,全都是碰到完以后,在发生的行为。
在这里插入图片描述

2.3.代码展示

import java.util.Scanner;
public class Main {
    public static void FillArr(int[][]arr,int n){
        int pos = 1; // 右上,和右
        int k = 2, i = 0, j = 0;
        while (k < n * n) {
            // 上边界
            if (i == 0 && j <n-1 && pos ==1) {
                arr[i][++j] = k;
                pos = -1;
            } // 左边界
            else if (j == 0&&i<n-1 && pos==-1) {
                arr[++i][j] = k;
                pos = 1;
            } // 下边界
            else if (i==n-1 && pos == -1) {
                arr[i][++j] = k;
                pos = 1;
            } // 右边界
            else if (j == n-1 && pos ==1) {
                arr[++i][j] = k;
                pos = -1;
            } else if (pos == -1) {
                arr[++i][--j] = k;
            } else if (pos == 1) {
                arr[--i][++j] = k;
            }
            k++;
        }
        arr[n-1][n-1]=n*n;
    }
    public static void PrintfArr(int[][]arr,int n){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[][]arr=new int[n][n];
        arr[0][0]=1;
        FillArr(arr,n);
        PrintfArr(arr,n);
    }
}

伴随着一个清脆的声响,这道题结束了。


总结

首先要找到规律,然后进行测试,注意一定要敢于去调试,发现自己的问题,然后进行改进。
具体代码过程可看ACM题目汇总

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS)——动漫喜羊羊网页设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

​​​【收录 Hello 算法】6.2 哈希冲突

目录 6.2 哈希冲突 6.2.1 链式地址 6.2.2 开放寻址 1. 线性探测 2. 平方探测 3. 多次哈希 6.2.3 编程语言的选择 6.2 哈希冲突 上一节提到&#xff0c;通常情况下哈希函数的输入空间远大于输出空间&#xff0c;因此理论上哈希冲突是不可避免的。比如&a…

2、快速搭建Vue框架以及项目工程

本篇文章详细讲解在配置完vue2环境后如何快速搭建一个Vue框架和项目工程。&#xff08;以智慧农业云平台为例&#xff09; 2.1 Vue工程创建 2.1.1创建想要存放的Vue文件夹 找到想要存放的文件夹并在目录搜索框中&#xff0c;并用管理员的方式打开。 2.1.2创建Vue工程 2、安装…

UStaticMesh几何数据相关(UE5.2)

UStaticMesh相关类图 UStaticMesh的数据构成 UStaticMesh的FStaticMeshSourceModel UStaticMesh的Mesh几何元数据来自于FStaticMeshSourceModel&#xff0c; 一级Lod就存在一个FStaticMeshSourceModel. FStaticMeshSourceModel几何数据大致包含以下几类: Vertex(点), VertexI…

【源码】Spring Data JPA原理解析之Repository的自动注入(一)

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

4种现象表明你的血糖控制良好!

如果你出现以下4种现象&#xff0c;恭喜你&#xff0c;说明你的血糖控制的不错&#xff0c;需要继续坚持。 1.饥饿感减少&#xff0c;我们的脏腑能够吸收血液中的糖分了&#xff0c;就用不着饿了。&#xff0c;血液中的糖能够得到充分的利用&#xff0c;血糖自然降下去。 2.体…

找到字符串中所有字母异位词 ---- 滑动窗口

题目链接 题目: 分析: 要找的是在s中和p是异位词的子串, 也就是说子串大小和p相同, 那么就是窗口大小固定的滑动窗口问题可以使用哈希数组来记录每个元素出现的个数, 定义hash1存放p中的各元素个数定义left 0; right 0;进窗口 让right指向的元素进窗口, 即更新hash2中的元素…

vue3自定义指令​(通过指令钩子获得dom和钩子参数)

实现文本框自动获得焦点 Index.vue: <script setup> import { ref, onMounted } from vue import ./index.cssconst vFocus {mounted: (el, binding) > {el.focus()console.log(binding)} }onMounted(() > {}) </script><template><div class&qu…

C#委托以及在事件驱动编程中的使用

C#中的委托&#xff08;Delegate&#xff09;是一种类型&#xff0c;它可以存储对方法的引用&#xff0c;并且可以像其他类型一样传递给方法。委托提供了一种灵活的方式来实现事件处理、回调函数和多播委托等功能。以下是关于C#委托的详细介绍&#xff1a; 定义&#xff1a; …

量化研究---A股赚钱日历,上证指数为例,提供源代码

今天把A股的全部数据导出做了一些赚钱日历分析&#xff0c;看那个月赚钱容易&#xff0c;那个月赚钱困难 导入需要的库 import pandas as pdimport matplotlib.pyplot as pltimport quantstats as qsfrom trader_tool.index_data import index_datafrom trader_tool import j…

风电功率预测 | 基于BP神经网络的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于BP神经网络的风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于BP神经网络的风电功率预测(附matlab完整源码) 基于BP神经网络的风电功率预测是一种常见的方法,它利用BP神经网络模型来预测风电场的发电功率。下面是一个基于BP神经…

HTML常用标签-表格标签

表格标签 1 常规表格2 单元格跨行3 单元格跨行 1 常规表格 table标签 代表表格 thead标签 代表表头 可以省略不写 tbody标签 代表表体 可以省略不写 tfoot标签 代表表尾 可以省略不写 tr标签 代表一行 td标签 代表行内的一格 th标签 自带加粗和居中效果的td 代码 <h…

【启程Golang之旅】环境设置、工具安装与代码实践

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

mysql,sqlserver数据库查询表,获得表结构,结构类型说明,获得这些数据,可以拿去创建表

mysql&#xff0c;sqlserver数据库查询表&#xff0c;获得表结构&#xff0c;结构类型说明&#xff0c;获得这些数据&#xff0c;可以拿去创建表 //表名p_order select * from information_schema.COLUMNS where TABLE_NAMEp_order;1、TABLE_CATALOG &#xff0c;nvarchar(128…

C++ | Leetcode C++题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> grayCode(int n) {vector<int> ret(1 << n);for (int i 0; i < ret.size(); i) {ret[i] (i >> 1) ^ i;}return ret;} };

47 tcp网络程序

网路聊天 API详解 下面用到的API&#xff0c;都在sys/socket.h中 socket (): socket() 打开一个网络通讯端口&#xff0c;如果成功的话&#xff0c;就像open() 一样返回一个文件描述符应用程序可以像读文件一样用read/write在网络上收发数据如果调用出错返回-1对于IPv4&am…

读人工智能时代与人类未来笔记03_演变

1. 演变 1.1. 每个社会都找到了属于自己的一套适应世界的方法 1.1.1. 适应的核心&#xff0c;是有关人类心智与现实之间关系的概念 1.1.2. 人类认识周围环境的能力 1.1.2.1. 这种能力通过知识获得&#xff0c;同时也受到知识…

研发管理-选择研发管理系统-研发管理系统哪个好

选择研发管理系统-研发管理系统哪个好 选择研发管理系统时&#xff0c;并没有一个绝对的“最好”的系统&#xff0c;因为每个企业的需求和情况都是独特的。然而&#xff0c;我可以向您介绍一些在市场上广受欢迎且功能强大的研发管理系统&#xff0c;供您参考&#xff1a; 1、彩…

OpenAI 推出 GPT-4o:实现多模态 AI 交互

一、前言 OpenAI 推出了其最新的 AI 模型——GPT-4o&#xff0c;此次发布的并非 GPT-4.5 或 GPT-5&#xff0c;而是一款全新的“全模态模型(Omnimodel)”。这是一个将文本、语音和视觉能力集成到单一无缝 AI 体验中的突破性发展。 GPT-4o 于 2024 年 5 月 14 日发布&#xff0…

生产消费者模型-环形队列与信号量

文章目录 前言一、怎样的环形队列&#xff1f;二、什么是信号量三、使用步骤信号量的接口函数1. sem_init2.sem_destroy3.sem_wait4.sem_post 环形队列的设计测试用例 前言 之前我们使用互斥锁和条件变量实现过一个生产者消费者模型&#xff0c;那么那个生产消费者模型具有一个…