`
java-mans
  • 浏览: 11423110 次
文章分类
社区版块
存档分类
最新评论

螺旋矩阵问题求解

 
阅读更多

输入一个矩阵的行列数量,生成一个螺旋矩阵,比如输入5,则打印:
1 2 3 4 5
12 13 14 15 6
11 10 9 8 7
输入3,则打印:
1 2 3
8 9 4
7 6 5

下面就是他的算法

package com.huawei2;

import java.util.Scanner;

public class Test {
	private static int length;
	private Test(){
		  Scanner sc=new Scanner(System.in);
	       System.out.println("请输入一个正整数:");
	       length=sc.nextInt();
	       array =new int[length][length];
	       System.out.println(length);
	       value=1;
	}
	private static int value=0;
	 private static int[][] array=null;
	private static Direction lastDirection=Direction.Right;
	
	static enum Direction{
		Right,Down,Left,Up;
	}
	public static void initArray(){
		int row = 0,line=0;
		
		for(int i=0;i<length*length;i++)
		{
			array[row][line]=value;
			lastDirection=lastDirection(row,line);
			switch(lastDirection)
			{
				case Right:
				{
					line++;
					break;
				}
				case Down:
				{
					row++;
					break;
				}
				case Left:
				{
					line--;
					break;
				}
				case Up:
				{
					row--;
					break;
				}
			}
			value+=1;
		}
	}
	public static Direction lastDirection(int row,int line)
	{
		Direction direction=lastDirection;
		switch(direction){
			case Right:
			{
				if(line==length-1||array[row][line+1]!=0)
					direction=direction.Down;
					break;
			}
			case Down:
			{
				if(row==length-1||array[row+1][line]!=0)
				{
					direction=direction.Left;
					
				}
				break;
			}
			case Left:
			{
				if(line==0||array[row][line-1]!=0)
				{
					direction=direction.Up;
				
				}
				break;
			}
			case Up:
			{
				if(array[row-1][line]!=0)
				{
					direction=direction.Right;
				}
				break;
			}
							
		}
		return direction;
	}
	public static void main(String[] args) {
		Test test=new Test();
		test.initArray();
		// show
		for(int i1 = 0; i1 < length; i1++)
		{
			for(int j1 = 0; j1 < length; j1++)
			{
				//打印数字前加空格,使整体对齐
				if(10 > array[i1][j1])
					System.out.print("  " + array[i1][j1] + " ");
				else if(100 > array[i1][j1])
					System.out.print(" " + array[i1][j1] + " ");
				else
					System.out.print(array[i1][j1] + " ");
				
				//进行换行
				if(length- 1 == j1)
					System.out.println();
			}
		}

	}

}



分享到:
评论

相关推荐

    n阶螺旋矩阵问题,阿牛的EOF牛肉串.pdf

    1.题目: n阶螺旋矩阵问题 题目描述: 创建n阶螺旋矩阵并输出。 2、阿牛的EOF牛肉串 题目描述: 今年的ACM集训队有一个叫做EOF的队伍,由阿牛、XC以及COY组 成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做...

    C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][10]={0}; printf(输入你要输出的几阶中断:); scanf(%d,&N); for(n=0;n&lt;=N/2;n++) { for(j=n;j&...

    求N阶回旋矩阵(C/C++)

    求N阶回旋矩阵,在给定阶数的二维数组外构建搜索边界,使用试探法求解

    旋转矩阵求解matlab代码-Single_View_Metrology:ComputerVisionMP4

    至少使用三个手动选择的线来求解每个消失点。 该MATLAB代码提供了用于选择和绘制线条的界面,但是需要插入用于计算消失点的代码。 有关估计消失点的详细信息,请参见Derek Hoiem的书中的章节(第4节)。 您还应该...

    c语言数学应用矩阵整数

    求解二元一次不定方程,最大公约及最小公倍数,自然对数的底e的计算,正弦、余弦、正切值,求等差数列,矩阵的加法运算,矩阵的乘法运算,打印n阶螺旋方阵,求33矩阵对角元素之和,求车运行速度,卖西瓜,打渔晒网...

    C++经典编程源程序

    都是平时自己在QQ上和人闲聊时给别人做的,有些好的我就记了下来,...万年历打印、阶乘位数、大数相加、螺旋矩阵、主函数递归——打印菱形、星期几程序、STL按字母表排序、二分法求解方程、STL泛型、字符串加密等等。。

    调平二自由度球面并联机构运动学分析与求解

    针对机构特点,基于螺旋理论分析机构自由度与约束,给出机构自由度矩阵与约束矩阵,得出该机构有2个转动自由度。依据构型建立机构坐标系,通过构造闭环矢量,建立驱动长度与动平台转动角度的数学模型并求得运动学逆解。...

    迷宫问题:m×n长方阵表示迷宫

    问题描述: 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现要求: ⑴ 实现一个以链表作存储结构的栈...

    一系螺旋弹簧动刚度对车辆-轨道耦合振动影响分析 (2015年)

    建立准确表征一系悬挂轴箱螺旋弹簧波动特性的力学模型,运用动刚度矩阵法求解,研究其对悬挂系统隔振性能影响。结合基于格林函数法的车辆-轨道耦合动力学模型,引入弹簧刚度频变特性,对比分析考虑一系螺旋弹簧频变刚度...

    基于EDEM的边帮采煤机螺旋输送性能研究

    采用EDEM软件建立螺旋输送仿真模型,以输送速率、平均质量流率为定性评价指标,利用极差法分析螺旋输送机构螺距、转速、向下输送倾斜角度对两评价指标的影响规律及主次顺序,最后通过矩阵求解得到最佳输送组合及影响...

    200个经典C程序【源码】

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    大口径光学元件磁流变加工驻留时间求解算法

    为了解决大口径光学元件磁流变高精度加工问题,基于矩阵运算模型,提出了SBB(Subspace Barzilai and Borwein)最小非负二乘与自适应Tikhonov正则化相结合的驻留时间快速求解方法。同时,在一次收敛中采用双去除函数...

    220个C语言程序源代码集合.zip

    013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割...

    220个C语言程序源代码.zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    200个C程序.rar

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    200个经典C程序源码(包括基础篇+数据结构篇+数值计算与趣味数学篇+图形篇+系统篇+常见试题解答篇).zip

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    C语言经典源代码实例 数据结构 操作系统 图形等

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    C语言源代码实例.rar

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

    经典的C程序220案列

    014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较...

Global site tag (gtag.js) - Google Analytics