java 顺时针螺旋数组(只用一次for循环完成装填数据)
来源:互联网 发布:安卓好友定位软件 编辑:程序博客网 时间:2024/06/02 04:48
二话不说直接上图 顺时针输入螺旋数字
思路: 第一 先确定什么时候进入下一圈结束( 就是图上的 20 32 )
第二 确定什么时候开始转变趋势 比如 最外层 1到6 是横向向右递增的 6到11是向下增加的 11到16是向左增加的 16到11是向上增加的
第三 当前数字和当前数组横向坐标和竖向坐标建立关系。(这是最难的,需要考虑横向 纵向)
直接贴代码 :
int number = Integer.parseInt(firstEt.getText().toString().trim());// Android 程序 输入入口 int[][] m = new int[number][number];// 建立数组 m[0][0] = 1; int topleft = 1;// 左上角的数字 对应 1 21 33 int topright = 1;// 右上角的数字 对应 6 24 34 int bottomleft = 1;// 左下角的数字 对应 16 30 36 int bottomright = 1;// 右下角的数字 对应 11 27 35 int quanmax = 0;// 本圈的最大值 就是 20 32 36 int quan = 1;// 圈数 1到20是第一圈 21到32是第二圈 for (int i = 0; i <= Math.pow(number, 2); i++) { // 循环装填 if (i == quanmax + 4 * (number + 1 - quan * 2)) {// 判断是否开始进入下一圈(某一圈的最后一个数字) quanmax =quanmax+4 * (number + 1 - quan * 2);// 20 32 36 m[quan][quan - 1] = i; quan++;// 圈数++; } else{ if (i == quanmax + 1) {// 左上角的数字判断 (某一圈的第一个数字) 对应 1 21 33 topleft = i; m[quan - 1][quan - 1] = i; } else if (i > topleft && i < topleft + 1 + number - 2 * quan) { // 左上角 到 右上角 从左到右 2到5 22到23 m[quan - 1][i - topleft + quan - 1] = i; } else if (i == topleft + 1 + number - 2 * quan) {// // 右上角的数字 对应 6 24 34 topright = i; m[quan - 1][number - quan] = i; } else if (i > topright && i < topright + 1 + number - 2 * quan) {// 右上角 到 右下角 竖向 从上到下 7到10 25到26 m[i - topright + quan - 1][number - quan] = i; } else if (i == topright + 1 + number - 2 * quan) {// 右下角的数字 对应 11 27 35 bottomright = i; m[number - quan][number - quan] = i; } else if (i > bottomright && i < bottomright + 1 + number - 2 * quan) {// 右下角 到 左下角 横向 从右到左 12到15 28到 29 m[number - quan][number + bottomright - i - quan] = i; } else if (i == bottomright + 1 + number - 2 * quan) {// 左下角的数字 对应 16 30 36 bottomleft = i; m[number - quan][quan - 1] = i; } else if (i > bottomleft && i < quanmax+4*(number+1-2*quan)) {// 左下角 到 左上角 从下到上 17到19 31 到32 m[number + bottomleft - i - quan][quan - 1] = i; } } } 开始打印 for (int i = 0; i < number; i++) { for (int j = 0; j < number; j++) { if (m[i][j]<10){ sb.append(" " + m[i][j]); }else{ sb.append("" + m[i][j]); } } sb.append("\n"); } resultTv.setText(sb.toString());
其中 firstEt是 edittext的id resultTv是textview
补充:有人认为定义的变量太多了 其实topright bottomleft bottomright quanmax 这些参数都可以用 topleft 加上一定的数字来表示 只是不太好理解了。
阅读全文
0 0
- java 顺时针螺旋数组(只用一次for循环完成装填数据)
- Java 实现顺时针螺旋二维数组输出
- 顺时针/螺旋打印数组
- 三维数组初始化(一次for循环)
- 顺时针打印二维数组(螺旋输出数组)
- 顺时针螺旋打印二维数组
- 顺时针数组循环打印
- Java只用一套嵌套for循环输出菱形
- 顺时针打印矩阵或者 螺旋数组
- 由外及内 顺时针 螺旋数组
- 数据按顺时针螺旋型减小
- C++一次for循环完成1!+2!+...+10!
- 顺时针循环增长的数组
- Java 螺旋数组的实现方式-一个循环实现哦
- [java]一次for循环实现查询有序数组中所有重复的元素
- 只用一个for循环输出九九乘法表
- GnomeSort 又是一个O(n2),不过,只用一次循环……
- Java for循环遍历数组
- MySQL 分区表
- 消息推送之goeasy
- opencv的二值化0
- go-ethereum 部署私有链
- node http get setTimeout abort
- java 顺时针螺旋数组(只用一次for循环完成装填数据)
- Java基础学习笔记09——(final关键字,多态,抽象类,接口)
- Java
- scala-collection
- 百度搜索
- 让Unity3d PlaySetting Keystore 记住密码
- warning: the frame size of 1040 bytes is larger than 1024 bytes
- http你不得不知道的那些事(六)--请求响应细节
- Android ble蓝牙问题