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

顺时针螺旋顺序填充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秒。 阅读详情

相关推荐

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7282

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

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

ai15013602354的博客 568

Palabos User Guide中文解读 | 第五章 | Palabos编程 (跳过了第四章Palabos-Java接口)

作者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,翻了一节后发现这可能算侵权,就比较伤脑筋,突然想到自己写中文解读即可,便有了下面的博客。 Palabos User Guide Release 1.0 r1 Copyright © 2019 University of Geneva Jul...

Yulan Fang's notes. 2298

顺时针打印数字矩阵

题意: 假如有矩阵(二维数组): 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

【Linux】Petalinux使用QSPI FLASH引导启动

1. 预分配Flash空间使用Flash引导Petalinux做的系统,也有进阶的做法。部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。1. 预分配Flash空间根据生成的bit文件大小估算BOOT.BIN文件的大小,为Flash大概分配四个分区:boot、bootenv、kernel、bootscr,分别存放BOOT.BIN文件、u-boot的环境变量、内核文件(image.ub/zImage/uImage等)、启动脚本boot.scr。

Tesseract_9527的博客 3375

别再自己写消息提示了!5分钟用WPF+Material Design打造专业级Snackbar(支持.NET 6)

本文为WPF开发者提供了一份快速集成专业级Snackbar消息提示的实战指南。通过引入MaterialDesignThemes开源库,在.NET 6 WPF项目中,仅需5分钟即可告别传统的MessageBox,实现遵循Material Design规范、动画流畅、支持队列管理的非侵入式Snackbar控件,显著提升应用的用户体验与现代化交互水平。

year5的博客 172

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

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

Quinn0918的博客 1980

C#菜鸟教程学习笔记

C#菜鸟教程学习笔记 C#简介 C# 是一种编程语言,它是由微软开发的。 C# 编程是基于 C 和 C++ 编程语言的,它与 Java 也非常相似。 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。 .Net 框架(.Net Framework)能编写出下面类型的应用程序: ①Windows 应用程序 ②Web 应用程序 ③Web 服务 常用的C# 编程的开发工具:Visual Studio(VS:可视化工作室) C#程序结构 一个 C# 程序(C# 文件的后缀为 .cs)主要包括以下部分

mlc_WTMOTW的博客 4978

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

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

fengxia110的博客 238

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1060

在 TASKPROCESSING 上为 ABAP OData 服务添加多个系统别名:从原理到落地的完整实践

本文面向SAP Gateway与ABAP开发者,详细讲解如何在TASKPROCESSING OData服务上添加系统别名。首先介绍了系统别名的概念与设计初衷,阐述了添加别名的业务场景需求,包括多系统接入、用户分流和灰度发布等。随后提供了标准配置步骤,从SPRO路径到具体操作说明,并分享了三个实际案例说明如何实现跨区域统一待办、按用户角色分流和灰度发布。最后给出了验证方法和常见问题解决方案,帮助开发者掌握这项基础但关键的配置技能,实现服务路由的可控管理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 137

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

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

weixin_60033897的博客 1011

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

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

从键盘输入一个整数(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是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

搞懂基本排序算法

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

weixin_34377065的博客 273

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

螺旋输出数列

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

奔跑的蜗牛 777

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

面试题:打印螺旋数字

输入一个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、付费专栏及课程。

余额充值