java,实现回形数输出

ops/2024/11/15 4:54:49/

键盘输入一个整数n,以n为矩阵大小,按顺时针螺旋的形式输出每个数(1、2、3…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


思路:以4为例

  1. 只要找到顺时针方向的行号和列号,依次赋值即可

  2. 可以分为4部分:【上、右、下、左】,把最外层的螺旋规律摸清,内层螺旋规律同理
    在这里插入图片描述

    java">【伪代码,以4为例】【声明变量】startRow = 0; // 存储开始行endRow = 3; // 存储结束行startCol = 0 // 存储开始列endCol = 3; // 存储结束列i = startRow  // 行号j = startCol; // 列号type = "top" | "right" | "bottom" | "left"; //  方向类型【外层螺旋】(top)   i固定startRow,j从startCol 到 endCol,startRow++;(right) j固定endCol,i从startRow 到 endRow,endCol--;(bottom)i固定endRow j从endCol 到 startCol,endRow--;(left)  j固定startCol i从endRow 到 startRow,startCol++;【内层螺旋,重复外层】(top)   i固定startRow,j从startCol 到 endCol,startRow++;(right) j固定endCol,i从startRow 到 endRow,endCol--;(bottom)i固定endRow j从endCol 到 startCol,endRow--;【跳出循环条件】if (startRow > endRow && startCol > endCol) break;

代码实现

java">import java.util.Scanner;public class Test {public static void main(String[] args) {// 输入整数Scanner sc = new Scanner(System.in);int num = sc.nextInt();// 动态初始化二维数组int[][] arr = new int[num][num];// 声明变量int startRow = 0;int endRow = num - 1;int startCol = 0;int endCol = num - 1;int i;int j;int count = 1; // 具体填入的值,从1开始String type = "top"; // 默认从top开始// 循环while(startRow <= endRow || startCol <= endCol) {if (type == "top") {i = startRow; // 固定行j = startCol;// 遍历列while(j <= endCol) {arr[i][j] = count;j++;count++;}type = "right";startRow++;} else if (type == "right") {i = startRow; j = endCol; // 固定列// 遍历行while(i <= endRow) {arr[i][j] = count;i++;count++;}type = "bottom";endCol--;} else if (type == "bottom") {i = endRow;j = endCol;while(j >= startCol) {arr[i][j] = count;j--;count++;}type = "left";endRow--;} else if (type == "left") {i = endRow;j = startCol;while(i >= startRow) {arr[i][j] = count;i--;count++;}type = "top";startCol++;}}// 输出矩阵for (int k = 0; k < arr.length; k++) {for (int l = 0; l < arr[k].length; l++) {System.out.print(arr[k][l] + "\t");}System.out.println();}}
}

http://www.ppmy.cn/ops/8510.html

相关文章

批量插入10w数据方法对比

环境准备(mysql5.7) CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 唯一id,user_id bigint(10) DEFAULT NULL COMMENT 用户id-uuid,user_name varchar(100) NOT NULL COMMENT 用户名,user_age bigint(10) DEFAULT NULL COMMENT 用户年龄,create_time time…

深入理解JavaScript - Proxy模拟vue的代理

视频链接 ⚠️视频里使用proxy的代码不能用&#xff01;&#xff01;&#xff01; &#xff08;1&#xff09;简单使用 const obj {a: 1,b: 2,c: {a: 1,b: 2,}, }; let v obj.a; Object.defineProperty(obj, "a", {get() {console.log("读取", a);},se…

JavaScript 实现大数简化,带单位显示

一、场景 在前端展示的数据时&#xff0c;如果数据数值太大&#xff0c;会导致展示的数据非常长&#xff0c;不仅用户不能迅速读出数值大小而且影响美观&#xff0c;此时我们需要将这种大数简化为带单位的数值&#xff0c;如 250000 转为 25.0万。 二、实现函数 // 大数简化函…

UBUNTU新版本,一键安装NETCDF,安装netcdf-c netcdf-v

UBUNTU新版本&#xff0c;一键安装NETCDF&#xff0c;安装netcdf-c netcdf-v_ubuntu安装netcdf-CSDN博客 UBUNTU新版本&#xff0c;一键安装NETCDF&#xff0c;安装netcdf-c netcdf-v 参考连接傻瓜式安装netcdf-fortran库 1&#xff09;保存bash代码&#xff0c;文件名为netc…

【PHP快速上手(十四)】

目录 PHP快速上手&#xff08;十四&#xff09;PHP 中常用数据库操作使用 WHERE 子句进行条件查询使用 ORDER BY 子句进行排序使用 UPDATE 语句更新数据使用 DELETE 语句删除数据执行事务总结 PHP快速上手&#xff08;十四&#xff09; PHP 中常用数据库操作 当使用 PHP 中的…

非计算机专业考软考高项有必要吗?

我认为这非常重要。 看了你的介绍&#xff0c;如果你已经考取了会计证书&#xff0c;而且想要考取计算机专业的证书&#xff0c;或者你的职业规划涉及到计算机岗位&#xff0c;又或者你对计算机感兴趣&#xff0c;我建议你优先考虑软考&#xff0c;因为这个证书的含金量是有保…

Linux gettid()系统调用源码分析

1、gettid()系统调用作用 gettid() 是一个Linux系统调用&#xff0c;用于获取当前进程的线程ID。在使用此系统调用时&#xff0c;你需要包含 <sys/syscall.h> 头文件&#xff0c;并且可以通过直接调用或使用 syscall() 函数来进行系统调用。 注意&#xff1a;ps 中显示的…

List<int[]>[] g = new ArrayList[n];

在Java中&#xff0c;List<int[]>[] g new ArrayList[n]; 这行代码定义了一个数组 g&#xff0c;该数组的每个元素都是一个 ArrayList<int[]> 类型的对象。这里&#xff0c;n 是预期图中顶点的数量&#xff0c;因此 g 数组的长度是 n。 List<int[]>&#x…