数字漩涡形输出
来源:互联网 发布:淘宝悠悠球哪个好 编辑:程序博客网 时间:2024/04/27 13:39
输出:
1 16 15 14 132 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9
思路为使用计算机模拟数字行径路线
java代码如下:
<pre name="code" class="java">public class Test151228_3 {private static final int DOWN = 1;//方向标志位private static final int RIGHT = 2;private static final int UP = 3;private static final int LEFT = 4;private static int mWay = DOWN;//记录标志public static void main(String[] args) {int[][] array = new int[7][7];//此处定义二维数组,为防止越界,在数组外围圈补0f(array, mWay,1,1);//开始行径for (int i = 1; i < array.length -1 ; i++) {//输出for (int j = 1; j < array[i].length -1; j++) {System.out.print(array[i][j] + "\t");}System.out.println();}}/** * aY * 0 0 0 0 0 0 0 * aX0 0 0 0 0 0 0 * 0 0 0 0 0 0 0 * 0 0 0 0 0 0 0 * 0 0 0 0 0 0 0 * 0 0 0 0 0 0 0 bX * 0 0 0 0 0 0 0 * bY */private static int i = 1;//计数private static int aX= 1;//转弯指令,转弯后指令应该改变private static int aY= 1;private static int bX= 5;private static int bY= 5;/** * 模拟行径动作 * @param array 数组 * @param way 方向 * @param x 层 * @param y 列 */private static void f(int[][] array, int way,int x,int y) {if(i > 25)return;//行径的路线为逆时针,即 下->右-> 上->左switch (way) {case DOWN://向下走array[x][y] = i;if(x >= bX || array[x+1][y] != 0){//这里判断是否转弯了(判断方法:通过指令,看下面是否已经有‘人’,防止撞上)i++;bX--;f(array,RIGHT,x,y+1);break;}i++;f(array,DOWN,x+1,y);break;case RIGHT:array[x][y] = i;if(y == bY || array[x][y+1] != 0){i++;bY--;f(array,UP,x-1,y);break;}i++;f(array,RIGHT,x,y+1);break;case UP:array[x][y] = i;if(x == aX || array[x-1][y] != 0){i++;aX ++;f(array,LEFT,x,y-1);break;}i++;f(array,UP,x-1,y);break;case LEFT:array[x][y] = i;if(y == aY || array[x][y-1] != 0){i++;aY ++;f(array,DOWN,x+1,y);break;}i++;f(array,LEFT,x,y-1);break;}}}
下面是我们老师给出方法,也是更好的方法,找出了其中的规律:
import java.util.Scanner;public class ch2 {/** * @param args * 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 */int [][] numArray;int r1=1;//记录每层的起始的数字int sf=0;//记录每层的起始下标int se=0;//记录每层的终止下标int r2=0;//减小量public static void main(String[] args) {// TODO Auto-generated method stub new ch2().printf();}public void printf(){int num=new Scanner(System.in).nextInt();numArray=new int[num][num];se=num;SetNum(num);for (int i = 0; i < num; i++) {for (int j = 0; j < num; j++) {System.out.print(numArray[i][j]+"\t");}System.out.println();}}public void SetNum(int num) //递归的为二维数组的赋值{if(num>0)//必须以个正数{for (int i = sf; i <se ; i++) { //为每一层的第一列和最后一列赋值numArray[i][sf]=r1;numArray[i][se-1]=r1+3*(num-1)-2*r2;r1++;r2++;}r2=1;for (int i = sf+1; i < se-1; i++) {numArray[se-1][i]=r1;numArray[sf][i]=r1+3*(num-1)-2*r2;r1++;r2++;}r2=0;sf++;//得到下一层的起始位置r1=r1+2*(num-1);se--;SetNum(num-2);}else{return; //负数退出递归}}}
0 0
- 数字漩涡形输出
- 漩涡
- PHP:矩阵的螺旋输出。。。是螺旋吗?我更倾向叫漩涡。
- 输入数字,输出数字读法
- 格式化输出数字
- 格式化输出数字
- 格式化输出数字
- 格式化输出数字
- C# 输出数字三角形
- 格式化输出数字
- C#数字格式化输出
- C#数字格式化输出
- C#数字格式化输出
- javascript :数字格式化输出
- 数字格式化输出
- C#数字格式化输出
- C#数字格式化输出
- 数字进制输出。
- objective-C基础----字典,集合
- iOS——TabelView
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- 关于C中的内存分配问题
- 横向滑动加载更多的控件的实现
- 数字漩涡形输出
- 虚函数
- Oracle EBS 交叉币种(2)-应收交叉币种
- xutils的使用
- Python---unit test
- llq考试 圣诞欢乐赛 (第二发)
- VS2010中使用sprintf出现warning C4996: 'sprintf': This function or variable may be unsafe.
- UITextView return键隐藏键盘
- OC基础----数组排序(OC)