刷题精选:顺时针输出递增数组(螺旋递增升天数组)

顺时针螺旋顺序填充n*n的二维数组(java) 输入一个整数n,为二维数组的边长 然后以顺时针螺旋的顺序把1-n*n填入这个数组 比如 输入3 输出 1 2 3 8 9 4 7 6 5 这里我使用了一种通过坐标之间的数学规律来实现这个算法, 这个方法不以顺时针螺旋的顺序一个一个赋值,而是以对角线的顺序赋值 所以这个方法不需要判断坐标的加减来找到下一个要赋值的坐标,对于我个人而言方便一些 这里再举几个例子方便理解 输入4 输出 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 输入5 输出 阅读详情

刷题精选:顺时针输出递增数组

题目描述

在这里插入图片描述
由上图描述,输入一个数字n,代表n行n列,之后经过函数之后顺时针的将从1到n打印出来。

算法分析

通过找规律,我们可以发现,最终的结果是一个正方形,那么我们可以联想到用一个二维数组按顺序来存储这些数字,最后输出二维数组即可,同时,这些数字是一圈一圈按照顺时针递增的,因此我们可以将这个二维数组拆开一圈一圈来看,我们画图来表示一下
以n=5为例
在这里插入图片描述
最后的二维数组需要储存成这个样子,那么我们可以将其分为三圈
第一圈:
在这里插入图片描述
第二圈:
在这里插入图片描述
第三圈:
在这里插入图片描述
我们如果按照圈来储存的话,那么他们按照顺时针存储的规律就是一样的了,即先顺序的储存最上边的一行,然后顺序的储存最右边的一列,之后再倒序的存储最下边的一行,最后倒序的存储最左边的一行,那么储存完一圈后,继续按照这个循环,每存储完一圈之后,开始行,结束行,开始列,结束列都会靠近(因为圈变小了)最后的第三圈只有一个数字,那么这个时候意味着开始行和结束行,开始列结束列已经相同了,当开始行大于结束行,开始列大于结束列时,循环结束,即二维数组储存完毕,最后直接输出二维数组即可

代码分析

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: hp
 * Date: 2022-07-12
 * Time: 11:08
 */
public class Dragon {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        //建立一个二维数组,储存所有的数字的顺时针版本,最后只需输出这个二维数组即可
        int[][] result= new int[number][number];
        //开始列,因为是数组因此以0开头
        int startC = 0;
        //结束列,因为是数组为了不使得下标超出因此-1
        int endC = number - 1;
        int startR = 0;
        int endR = number - 1;
        //定义计数器,记录每个位置的数字
        int count = 1;
        //每次循环过程中四个变量都会逐渐接近,当start大于end时,结束循环
        while(startC <= endC && startR <= endR){
            //先输出顶行的,顺序输出(从左向右)
            //从起始列开始,到结束列
            for (int i = startC; i <= endC; i++) {
                result[startR][i] = count;
                count++;
            }
            //每一顶行输出完,下一次就是下一行了,因此startR++
            startR++;
            //输出右边一列的,顺序输出(从上到下)
            //从当时的起始行开始,因为上边循环已经输出完了顶行,因此直接从下一行开始输出
            //刚刚已经对startR++了,所以直接使得i=startR即可
            for (int i = startR; i <= endR; i++) {
                result[i][endC] = count;
                count++;
            }
            //因为输出完了右边一列,右边一列意味着结束列,下一次执行这个for循环则会是
            //这一列的内部(左边)一列,因此endR--
            endC--;
            //再输出底部一行,倒序输出(从右向左),直接由当前的结束列开始
            for (int i = endC; i >= startC; i--) {
                result[endR][i] = count;
                count++;
            }
            //底部一行填充完毕,因此endR--
            endR--;
            //在输出左边一列,也是从结束行开始,倒序输出(从下到上)
            for (int i = endR; i >= startR; i--) {
                result[i][startC] = count;
                count++;
            }
            //左边一列填充完毕,开始列加一startC++
            startC++;
        }
        //输出数组
        for (int i = 0; i < number; i++) {
            for (int j = 0; j < number; j++) {
                System.out.print(result[i][j] + " ");
            }
            System.out.println();
        }
用友集团2023届秋招Java笔试-B卷--数字缩圈 将从1开始依次增加的n个整数(n为[1,52]之间的整数),以给定的顺序顺时针围成一个圆圈。在这个圆圈中找到数字1并将其移出圆圈,然后顺时针寻找下一个除4余2的数字并将其移出圆圈,然后顺时针寻找下一个除4余3的数字并将其移出圆圈,然后顺时针寻找下一个能被4整除的数字并将其移出圆圈,然后顺时针寻找下一个除4余1的数字并将其移出圆圈……解析:首先需要将输入的整数列表转换为一个数组,然后使用循环遍历数组,按照题目要求的规则依次移除数字。时间限制:C/C++ 1秒,其他语言2秒。 阅读详情

相关推荐

Hermes Dashboard Web 端部署完整说明

通过反向代理(nginx)使用公网域名访问时,会遇到 Host 头校验、CORS 跨域、WebSocket 连接拒绝三个核心问题。本文档记录了完整的源码修改方案和部署步骤。确保 nginx 主配置加载了 WebSocket map(宝塔默认为。路径的公开访问(无需登录),其他路径仍受 Cookie 认证保护。Hermes Dashboard 默认绑定。访问站点时会先弹出浏览器密码框,输入用户。在 nginx 反向代理配置中的。环境变量动态读取允许的域名。nginx 配置中已添加。

大白菜代码的博客 805

【剑指offer】从二维递增数组中进行查找

算法是程序员的内功,快来和博主一起修炼内功吧!

ai15013602354的博客 568

使用.NET 免费开源包ViewFaceCore做一个人脸识别并注册的功能,没有比我更全的

本文介绍了一个基于WinForm的免费人脸识别系统实现方案。系统使用AForge和ViewFaceCore库,支持从USB或电脑自带摄像头采集图像,具备人脸注册和快速识别功能。硬件方面仅需普通摄像头,软件依赖多个NuGet包(如AForge.Video、ViewFaceCore等)。界面包含视频显示、图像预览和功能按钮控件,后台采用SQLServer存储用户面部特征数据。核心代码展示了人脸检测、特征提取和多线程处理逻辑,通过ViewFaceCore实现高效识别。系统具有识别速度快、准确率高的特点,适合Win

一个靠“吃代码”长大的程序猿,专治各种“Bug 饥饿症”。 817

顺时针打印数字矩阵

题意: 假如有矩阵(二维数组): 1 2 3 4 5 6 7 8 9 10 11 12 12 14 15 16 则依次打印出数字:1,2,3,4,8,12,16,15,14,12,9,5,6,7,11,10 即顺时针打印。 几种需要注意的情况: 第一种: 1 2 3 4 5 6 结果为:1,2,3,6,5,4 第二种: 1 2 3 结果为:

KeepThinking_的专栏 1363

APK静态分析(取证角度)——理论部分

APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。

currify的博客 3207

GAN网络(论文阅读):Generative Adversarial Nets

当判别器效果比较好时,D(G(z))值为0,则log(1-D(G(z)))值为0,当判别器效果不好,会输出一个大于0 的数,则log(1-D(G(z)))值就为一个负数,在极端情况下,会得到负无穷大,此时判别失误。在价值函数的第二项中存在问题,在早期G比较弱的时,生成的数据和真实数据相差很大,D就容易训练的比较好,很容易区分,就会导致log(1-D(G(z)))变成0 ,这样很难求梯度来优化G,所以更新G时,将优化函数改为log(D(G(z)))。最终使G赢,即G生成的数据D判别不出来。

m0_54248968的博客 2293

有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)

题目是这样的:有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。要求:时间复杂度小于O(N); 在这里我说一下我解题的各种逻辑和方法。 一看到这个题目,最开始的时候,我是这样想的:利用循环直接遍历数组中的每一个数就行了呀! 可是后面发现如果这个数组变得非常大的话(假如是10*10的数组,要找的数在最后一个),那它的时间复杂度就是

Quinn0918的博客 1980

HFSS简要教程--无线能量传输线圈仿真

关于无限能量传输线圈仿真简要教程

asdmoon18的博客 2547

二维数组中,每一行每一列按照从左到右递增顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间复杂度小于O(n) ,空间复杂度O(1).

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间复杂度小于O(n) ,空间复杂度 O(1).

fengxia110的博客 238

windows11 远程桌面连接 通过代理连接RDP桌面报错 错误代码0x904 拓展错误代码0x7

打开windows Defender防火墙设置--允许应用通过防火墙更改设置--允许其他应用浏览--进入C:\WINDOWS\system32目录选择mstsc.exe进入C:\Windows\SysWOW64目录h'qmstsc.exe添加后列表里多了一个远程桌面连接,还有一个Remote Desktop Connection,配置网络权限后保存连接成功。

weixin_43978891的博客 1万+

OCTF2016--piapiapia

知识点: php反序列化长度变化尾部字符串逃逸 目录扫描发现www.zip,下载得到源码 源码有index.php,输入账号密码后会进入profile.php,还有register.php、updata.php、class.php和config.php flag值在config.php中,想办法访问到其内容 通过seay代码审计找到一点线索 看到profile.php中存在任意文件读取漏洞,前面还有反序列化 现在我们有个大体思路了,update.php中有一个$prof..

Oavinci的博客 474

算法学习系列(十六):二维数组填充数字问题

关于这个二维数组填数问题我碰到过很多次,不管是找工作笔试面试,还是在算法竞赛,而且这种问题都有很多种变形,当初学算法的时候让我很是头疼,因为总是会了一道后,过了一段时间就忘了,又或者是这道会了,然后变了一下就不会了,我很是苦恼啊,不过当我某天在qq群中看到一个群友发的这种问题后,一下勾起了我的思考,然后不知道怎的,我就自己想出了一种方法,我觉得这个方法可以用在这种问题的任意一个地方,所以我觉得很好,然后我也就写篇博客总结一下吧,这个套路我是从BFS上汲取出来的,话不多说直接开始。

weixin_60033897的博客 1011

STM32智能头盔DIY全攻略:从心率监测到跌倒报警的完整实现

本文提供了基于STM32的智能头盔完整DIY实现方案,涵盖从心率监测到跌倒报警的核心功能。详细解析了系统设计、硬件搭建、软件算法及系统联调,重点介绍了STM32主控、MAX30102心率传感器和MPU6050姿态传感器的应用,并分享了跌倒检测算法与功耗优化等实战经验,为嵌入式开发与物联网创新项目提供全面指导。

sony5的博客 498

顺时针螺旋递增等差数列矩阵

从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出: 1 2 4 3 输入数字3,则程序输出: 1 2 3 8 9 4 7 6 5 输入数字4, 则程序输出: 1  2   3   4 12  13 14  5 11  16 15  6 10   9 8   7 #includ

pmgcat的专栏 1507

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

搞懂基本排序算法

搞懂基本排序算法 上篇文章写了关于 Java 内部类的基本知识,感兴趣的朋友可以去看一下:搞懂 JAVA 内部类;本文写的内容是最近学习的算法相关知识中的基本排序算法,排序算法也算是面试中的常客了,实际上也是算法中最基本的知识。由于 Android 开发中用到的地方并不多,所以也很容易遗忘,但是为了进阶高级工程师巩固基本算法和数据结构也是必修课程之一。 基本排序算法按难易程度来说可以分为:冒泡...

weixin_34377065的博客 273

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

螺旋输出数列

21      22 ................ 20       7        8         9         10 19       6        1          2         11 18       5         4          3        12 17       16      15       14       13 如上,设

奔跑的蜗牛 777

面试题:打印螺旋数字

输入一个n,打印n阶螺旋 n = 1 1 n = 2 9 2 3 8 1 4 7 6 5 n = 3 25 10 11 12 13 24 9 2 3 14 23 8 1 4 15 22 7 6 5 16 21 20 19 18 17 如上,输入不同的n值得到不用的数字螺旋。通过上面的示例可以找出基本规律:1总是在最中心位置,最大边的个数与n的关系是2n-1的关系,以及最左上角的值是最大边的乘...

张小强的专栏 2324

螺旋数解法

题目介绍: 输入一个正整数N(1-15),生成一个N*N二维数组,由数组左上角从1开始用自然数列顺时针螺旋填充该数组直至数组中心位置,将该N*N数组中元素全部填充完即程序结束。 输出格式:每个数字占据5个字符宽度,右对齐。 解题思路:按照数字增大的顺序,依次填充,每次循环以一个循环圈为单位,然后在打印数组。 代码: #include<stdio.h> int main() { printf("Please input N [1-15]:\n"); int N,n=1,j,i; ..

m0_60643800的博客 833

C语言数字递增程序,c语言:使一个N*N二维数组输出呈顺时针螺旋递增

#includeint main( ){int i, j, a[100][100]={0}, n, k = 1;printf("please input a number n:");while(scanf("%d", &n)!=EOF){k = 1;for (i = 1; i <= n / 2; ++ i){for (j = i; j <= n - i; ++ j) /* 左侧...

weixin_35679331的博客 1043

LeetCode之每日一题——153、154. 寻找旋转排序数组中的最小值——Java实现

153. 寻找旋转排序数组中的最小值 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2] 若旋转 4 次,则可以得到 [0,1,2,4,5,6,7] 注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。 给你

小叮当不懒的博客 354

顺时针螺旋递增矩阵

与[BASIC-25]类似,如图,顺时针打印由外向内顺时针打印矩阵 具体思想与下题类似 [BASIC-25]-回形取数 点击打开链接 import java.util.Scanner; public class Main{ static int temp = 0; public static void main(String[] args) { Sca

行走江湖的少侠哥 1197

N*N顺时针螺旋递增数组(多益网络)

#include #define MAX 100 int main(){ int i = 0; int j = 0; int a[MAX][MAX] = { 0 }; int n = 0; int k = 1; printf("please input a number n:"); while (scanf("%d", &n) != EOF) { k = 1;

wangpengcsdn1的博客 783

螺旋数列

#include #define max(a,b) (a>b?a:b) #define abs(a) (a>0?a:-a) //螺旋队列 int foo(int x,int y) { //t的值代表前面有t圈螺旋 //1坐标(0,0)为第一圈,2、3、4、5、6、7、8、9为第二圈,...... int t=max(abs(x),abs(y)); if(t==0) retur

晨风 3321

剑指offer代码及思路python版67题全

1、二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:从左下角开始,大于目标值就行减一,小于就列加一。 2、替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之...

weixin_43884089的博客 2593

二维数组顺时针输出(C语言实现)

题目概述: 给定一个二维数组,要求顺时针对其进行输出。例如给定二维数组int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};要求输出结果为:1、2、3、6、9、8、7、4、5。 题目分析: 这道题目乍一想似乎很简单,只不过是通过变量控制,输出结果就行。但事实上要实现任意二维数组的顺时针输出,这种方法边不可取。于是自己花了很多时间去思考其求解过程。仔细一想,二维数...

FDk_LCL的博客 5791

将1到n*n顺时针赋值到n*n的矩阵中

螺旋矩阵 给定一个正整数 n,生成一个包含 1 到 n*n 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 思路:模拟顺时针画矩阵的过程,1.从左到右;2.从上到下;3.从右往左;4.从下往上,每次都在前闭后开区间[a,b),从(0,0)开始每一圈都以矩阵的左上角为起点画圆,一圈结束后,起点的x,y加1继续画圆,如果n为偶数,则需要画n/2个圆;如果n为奇数,则画n/2个原后,将矩阵中心的值(

Lc_summer的博客 975
上一篇: Java中的线程安全问题(多线程重点)
下一篇: HTTP协议
bit_zhy
博客等级 码龄5年 370粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值