题目要求:输入一个整型数n
输出:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
解题思路:
1.观察输出结果,分析可以通过方向的改变来对行列的值进行改变。
1)right:row = row;col = col + 1
2)down:row = row + 1;col = col;
3)left:row = row;col = col-1;
4)up:row = row-1;col = col;
2.再通条件控制方向就行了。
下面是代码:
这个是定义的一个方向的枚举类型
package org.iSun.heisedeyueya;
public enum Direction {
Left, Right, Up, Down
}
下面是具体算法和测试
package org.iSun.heisedeyueya;
public class Funciton {
/**
* @author 黑色的月牙
* @param args
*/
public static void main(String[] args) {
print(5);
}
public static void print(int n) {
// 开始的默认方向
Direction direction = Direction.Right;
int[][] arr = new int[n][n];
int row = 0, col = 0;
arr[0][0] = 1;
for (int i = 2; i <= n * n; i++) {
switch (direction) {
case Right:
col = col + 1;
// 当col<n并且arr[row][col]==0(也就是还没有填值的时候)
if (col < n && (arr[row][col] == 0)) {
arr[row][col] = i;
} else {
i = i - 1;// 从if语句块儿跳出的时候i =i+1,但那时无效,所以此时i = i-1,恢复i的值
col = col - 1;
direction = Direction.Down;
}
break;
case Down:
row = row + 1;
if ((row < n) && (arr[row][col] == 0)) {
arr[row][col] = i;
} else {
i = i - 1;
row = row - 1;
direction = Direction.Left;
}
break;
case Left:
col = col - 1;
if ((col >= 0) && arr[row][col] == 0) {
arr[row][col] = i;
} else {
i = i - 1;
col = col + 1;
direction = Direction.Up;
}
break;
case Up:
row = row - 1;
if ((row >= 0) && arr[row][col] == 0) {
arr[row][col] = i;
} else {
i = i - 1;
row = row + 1;
direction = Direction.Right;
}
break;
}
}
/**
* 打印输出
*/
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
分享到:
相关推荐
C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之蛇形矩阵C++之...
使用二维数组和双重循环打印蛇形矩阵使用二维数组和双重循环打印蛇形矩阵使用二维数组和双重循环打印蛇形矩阵
java 蛇形矩阵 最简单的 初学者用
生成一个n阶的蛇形矩阵的java程序 输入矩阵宽度n生成宽度为n的递增的蛇形矩阵
以前用c++写的一个蛇形矩阵
用C++写的一个蛇形矩阵,当输入一个整数n(10>=n>=1)时,输出大小为n行n列的蛇形矩阵。
因此输出的形状,像条蛇,因此称为蛇形矩阵.
蛇形矩阵递归算法,通过简单地递归实现蛇形矩阵的输出
学习数组或则循环结构时经常遇到的一个可以说是经典的问题——蛇形矩阵
基于c++的蛇形矩阵,通过用户输入蛇形矩阵的维数,自动具体输出蛇形排列矩阵
这是一个c语言的作业,能够输出逆时针蛇形矩阵,很好用!!
c++练习题蛇形矩阵
蛇形矩阵的实现的经典案例for(i=1;i;i++)/*对副对角线上三角端点赋值*/ { k=k+i; if(i%2==1) { a[0][i]=k; a[i][0]=k+i; } else { a[i][0]=k; a[0][i]=k+i; } }
蓝桥杯—蛇形矩阵题解.zip 是一个压缩文件,包含了关于蛇形矩阵问题的详细题解和代码实现。该资源旨在帮助参加蓝桥杯竞赛的选手更好地理解蛇形矩阵问题,并提供相应的解决方案和代码示例。 内容概要: 该压缩文件...
自己写的一个小程序,输入一个整数N,输出N阶逆时针蛇形矩阵
三种蛇形矩阵的具体算法
输入正方形数字矩阵边长 a,,如样例所示规律,输出矩阵(不要求对齐,每行每个数分别用一个空格格开)。 样例: 输入: 4 输出: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 输入: 5 输出: 13 14 15 16 1 ...
// 例如 4 x 4 蛇形矩阵 // 1 3 - 4 10 // | / / / | // 2 5 9 11 // / / / // 6 8 12 15 // | / / / | // 7 13 - 14 16 http://blog.csdn.net/ssuchange/article/details/17347743
c# 上三角螺旋加下三角蛇形矩阵 N=4时 1 11 12 13 7 2 16 14 8 6 3 15 10 9 5 4 N=5时 1 16 17 18 19 9 2 24 25 20 10 8 3 23 21 14 11 7 4 22 15 13 12 6 5
利用visual c++实现的蛇形矩阵的程序