Java编程实现打印螺旋矩阵实例代码
作者:purelife 发布时间:2021-10-16 19:15:14
标签:java,螺旋矩阵,算法
直接上代码吧。
昨晚腾讯在线测试遇到的题。
螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。
import java.util.Scanner;
public class mysnakematrix {
private int n;
//
private int a[][];
// 声明一个矩阵
private int value = 1;
// 矩阵里数字的值
public mysnakematrix(int i) {
this.n = i;
a = new int[n][n];
}
// 计算第m层左上角的数字
private int getcorner(int m) {
int corner = 1;
int o = n - 1;
for (int i = 0; i < m - 1; ++i) {
corner += 4 * o;
o = o - 2;
}
return corner;
}
// 生成矩阵的每一层的每一边的数
// s表示4个方向,分别取值1,2,3,4,表示4个不同的方向。
// o表示这条边的起始值。
// x表示第m层每条边的数字个数
private void side(int s, int o, int x, int m) {
int i = 0;
int j = 0;
switch (s) {
case 1:
i = m - 1;
j = m - 1;
for (int k = 0; k < x; ++k) {
a[i][j + k] = value;
++value;
}
break;
case 2:
i = m - 1;
j = m - 1 + x;
for (int k = 0; k < x; ++k) {
a[i + k][j] = value;
++value;
}
break;
case 3:
i = m - 1 + x;
j = m - 1 + x;
for (int k = 0; k < x; ++k) {
a[i][j - k] = value;
++value;
}
break;
case 4:
i = m - 1 + x;
j = m - 1;
for (int k = 0; k < x; ++k) {
a[i - k][j] = value;
++value;
}
break;
}
}
// 生成蛇形矩阵的第m层
private void shell(int m)// m表示第m层
{
int x = n - 1 - (m - 1) * 2;
// x表示第m层每条边的数字个数
int o = getcorner(m);
int o1 = o;
int o2 = o1 + x;
int o3 = o2 + x;
int o4 = o3 + x;
// System.out.println(o4);
side(1, o, x, m);
side(2, o, x, m);
side(3, o, x, m);
side(4, o, x, m);
}
// 生成蛇形矩阵
public void snakeMatrix() {
int m = (n + 1) / 2;
// 计算一共有多少层
for (int i = 1; i <= m; ++i) {
shell(i);
}
if (n % 2 == 1) {
a[n / 2][n / 2] = n * n;
}
}
// 打印矩阵
public void print() {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (a[i][j] < 10) {
System.out.print(a[i][j] + " ");
} else {
System.out.print(a[i][j] + " ");
}
}
System.out.println();
}
}
public static void main(String args[]) {
mysnakematrix my = new mysnakematrix(new Scanner(System.in).nextint());
//利用Scanner获取控制台输入
my.snakeMatrix();
my.print();
}
}
总结
Java语言描述存储结构与邻接矩阵代码示例
Java编程实现邻接矩阵表示稠密图代码示例
Java编程实现A*算法完整代码
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
来源:https://www.cnblogs.com/purelife/p/5833866.html


猜你喜欢
- Timer 详解Timer 和 TimerTask 用于在后台线程中调度任务的 java.
- 前言记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑结论:给心急的人。 直接在
- 一. 安装依赖包yum install -y wgetyum install -y gcc-c++yum install -y zlib-d
- 前言Inotify会对工程内的所有文件夹设置”watch handle”。不幸的是,Linux默认的watch handle的限值不能满足实
- 一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要
- 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运
- 本文实例为大家分享了C#基于winform实现音乐播放器的具体代码,供大家参考,具体内容如下首先,右键工具箱的组件,找到选择项,找到Wind
- 一,JDK环境变量;下载地址:HTTP://pan.baidu.com/s/1bpG3KYz1,新建变量名:JAVA_HOME,变量值:C:
- springboot项目还是ssm等java常用框架都会有这样的问题,解决办法通用问题场景前端发送Post请求,前端返回400 Bad Re
- 前言现在一般很少有用Android原生app发送邮件的需求,但是前段时间公司项目需要在Android app 内部发送邮件,于是就在网上收集
- 前言在项目中,如果我们要遵循分层领域模型规约: 话,肯定避免不了在DTO、VO、BO、AO、VO、Query等实体的转换,我们通常有几种做法
- 1.Hibernate中的多表查询 1.1SQL中的多表查询【交叉连接】select * from A,B;【内连接】显示内连接:
- 本文以在chart控件上和窗体上画矩形为例子讲述了C# GDI在控件上绘图的方法。分享给大家供大家参考。具体方法如下:具体的实现方法就不多解
- disruptor不过多介绍了,描述下当前的业务场景,两个应用A,B,应用 A 向应用 B 传递数据 . 数据传送比较快,如果用http直接
- 一、区别和联系异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如
- 这篇文章主要介绍了Spring Cloud Zuul添加过滤器过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 1. 动态sql动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql
- Android jni调试打印char阵列的实例详解前言:在android开发中,用jni有时候需要打印某一个字符串的二进制格式输出,比较友
- /** * 三角数字: * 比达哥斯拉领导下的古希腊数学家发现了一个有趣的数字序列1, 3, 6, 10, 15, 21,... *
- Android从网络中获得一张图片并显示在屏幕上的实例详解看下实现效果图:1:androidmanifest.xml的内容<?xml