CoreJava逻辑思维-顺时针打印自定义矩阵
CoreJava逻辑思维-顺时针打印自定义矩阵
这两天回顾了一下刚入Java时的一些比较有意思的逻辑题,曾经也费劲脑汁的思考过的一些问题,比如百钱百鸡最简单的算法啦之类的,而今天博主想说的是一个循环打印指定字符的一道问题。上题目。
从控制台输入两个数字代表矩阵的行列数,并顺时针回旋打印出从1-矩阵可以存放元素的个数
例:接收数据 4 4 ,则打印出的图形为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
此处博主只给出了一种解决方案,欢迎有想法的小伙伴可以给出更简单的方法。
博主以前的解决方案为(为什么说以前呢,因为最近真的是没什么时间去考虑新方法了)
思路
既然是个矩阵,那么博主首先想到的就是使用二维数组来解决此事,那么问题来了,如何将1-m*n按照这样的规律存进数组便是解体的关键(其实跟没说一样,知道这种规律直接打印好了)
闲话不多说,现在博主召唤出四大圣使来解决这个问题吧。
朱雀:第一行,我是自增的。
白虎:最后一列,我也是自增的。
玄武:最后一行,我是递减的!!
青龙:第一列,除去第一个元素我也是递减的。
艾玛,别说了,博主知道了,
//定义一个二维数组,用来存储矩阵元素
int[][] array = new int[m][n];
//定义两个变量,用来控制待填充元素的位置
int i,j;
//定义一个计数器,用来代表矩阵元素。
int count = 0;
准备的差不多了。那就上代码吧~最笨的方法见下。
/*计数器*/
private static int count = 0;
/**/
private static int i = 0;
/*控制台接收输入参数*/
private static Scanner input = new Scanner(System.in);
//程序入口
public static void main(String[] args) {
System.out.println("请输入两个数作为行列");
int m = input.nextInt();
int n = input.nextInt();
/*初始化一个m行n列的二维数组*/
int[][] array = new int[m][n];
/*初始值设为1*/
int num = 1;
count = m / 2;
if (m % 2 != 0) {
count++;
}
int sum = m * n ;
//对元素进行排序
array = getNums(array, m, n, num,sum);
//打印数组元素
printArray(array, m, n);
input.close();
}
/**
* 根据输入行列值初始化数据
*
* @param array 空数组
* @param m 行
* @param n 列
* @param num 数据从1开始
* @return 赋值后数组
*/
private static int[][] getNums(int[][] array, int m, int n, int num,int sum) {
//遍历行
for (int j = i; j < n; j++) {
array[i][j] = num;
num++;
if (num > sum) {
return array;
}
}
//固定列,四边形最右边的数据
for (int j = i + 1; j < m; j++) {
array[j][n - 1] = num;
num++;
if (num > sum) {
return array;
}
}
//固定行,四边形最下面的数据
for (int j = n - 2; j > i; j--) {
array[m - 1][j] = num;
num++;
if (num > sum) {
return array;
}
}
//固定列,四边形最左边一列的数据
for (int j = m - 1; j > i; j--) {
array[j][i] = num;
num++;
if (num > sum) {
return array;
}
}
n--;
m--;
i++;
if (i == count) {
return array;
}
return getNums(array, m, n, num,sum);
}
/**
* 输出数组中所有元素
*
* @param array 待输出数组
* @param m 行
* @param n 列
*/
private static void printArray(int[][] array, int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print(array[i][j] + "\t");
}
//空行
System.out.println();
}
}
接下来,上结果图~~~

可以联系博主哟~~
邮箱:ycountjavaxuan@outlook.com
CoreJava逻辑思维-顺时针打印自定义矩阵的更多相关文章
- 剑指offer十九之顺时针打印矩阵
一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- 51. 顺时针打印矩阵[print matrix in clockwise direction]
[本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...
- php笔试算法题:顺时针打印矩阵坐标-蛇形算法
这几天参加面试,本来笔试比较简单,但是在面试的时候,技术面试官说让我现场写一个算法,顺时针打印矩阵的坐标,如图所示 顺序为,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10 ...
- 《剑指offer》— JavaScript(19)顺时针打印矩阵
顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打 ...
- 剑指offer得意之作——顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3 ...
- [PHP] 算法-顺时针打印矩阵的PHP实现
1.行数和列数取出来row,col,圈数就是 (较小值-1)/2+1 2.外层循环控制圈数,内层四个for循环,i 3.第一个for循环,从左到右,j=i;j<col-i;j++;j<; ...
- 《剑指offer》顺时针打印矩阵
本题来自<剑指offer> 顺时针打印矩阵 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 1 ...
- 【Java】 剑指offer(29) 顺时针打印矩阵
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思 ...
随机推荐
- C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换
/// <summary> /// 本类实现阿拉伯数字到大写中文的转换 /// 该类没有对非法数字进行判别,请事先自己判断数字是否合法 /// </summary& ...
- c++ const全局对象是如何处理的
我主要是记录一个发现,目前我不能解释,先作个记录. const 只是一个 语义约束,由编译器强制实施的.使被约束的对象不能被直接访问修改. 我用 『直接』这词,因为在代码段中 ,用一个const 指针 ...
- Bash 常用快捷键(转)
在mtysql client中按HOME键和END键失效,查了也没有找到原因 使用Bash常用的快捷方式即可. http://blog.csdn.net/mingzhou/article/detail ...
- Android Task 任务
关于Android中的组件和应用,之前涉及,大都是静态的概念.而当一个应用运行起来,就难免会需要关心进程.线程这样的概念.在Android中,组件的动态运行,有一个最与众不同的概念,就是Task,翻译 ...
- TensorFlow简易学习[1]:基本概念和操作示例
简介 TensorFlow是一个实现机器学习算法的接口,也是执行机器学习算法的框架.使用数据流式图规划计算流程,可以将计算映射到不同的硬件和操作系统平台. 主要概念 TensorFlow的计算可以表示 ...
- Ionic3学习笔记(十一)实现省市区三级联动
本文为原创文章,转载请标明出处 目录 安装 ion-multi-picker 导入 app.module.ts 创建 provider 创建 page 一个坑 更多 效果图 1. 安装 ion-mul ...
- 《java.util.concurrent 包源码阅读》06 ArrayBlockingQueue
对于BlockingQueue的具体实现,主要关注的有两点:线程安全的实现和阻塞操作的实现.所以分析ArrayBlockingQueue也是基于这两点. 对于线程安全来说,所有的添加元素的方法和拿走元 ...
- 使用asp.net mvc引擎开发插件系统
一.前言 我心中的插件系统应该是像Nop那样(更牛逼的如Orchard,OSGI.NET),每个插件模块不只是一堆实现了某个业务接口的dll,然后采用反射或IOC技术来调用,而是一个完整的mvc小应用 ...
- Less的Extend_Less继承
Extend就相当于Java的继承,它允许一个选择器继承另一个选择器的样式.Extend有两种语法格式. 一种是: <selector>:extend(<parentSelector ...
- 2723:不吉利日期-poj
2723:不吉利日期 总时间限制: 1000ms 内存限制: 65536kB 描述 在国外,每月的13号和每周的星期5都是不吉利的.特别是当13号那天恰好是星期5时,更不吉利.已知某年的一月一日是 ...