来源于 http://hi.baidu.com/shijiebei_2009/item/3629962d7056e50043634a69
以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中
import java.util.Scanner;
/**
* 从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
*
* @author wangxu
* date:2012/3/24
* 说明:时间有限,给一个不太优化的代码,足以实现功能
* 思路:先声明一个二维数组用来存储每个对应的数字,对数组赋值完成之后就可以打印输出
* 我的代码可以实现整型以内的所有合法数字,并不局限于20以内
*
*/
public class Demo {
static int arr[][];//二维数组用来存储数字
static int currentNumber = 1;// 从1开始打印,用来控制整个流程需要打印的数字
static int num = 0;//用来判断何时可以打印
public static void main(String args[]) throws Exception {
Scanner in = new Scanner(System.in);//获取输入流
System.out.println("请输入您希望打印的矩阵的最大的值:");//打印提示信息
String input = in.next();//获取用户的输入
int count = 0;//计数器
if (input.matches("\\d+")) {// 输入正确,用来检验用户输入的是否是数字
num = Integer.parseInt(input);
count = num;// count用来控制在每一个方向上打印几个数字,第一次打印时候和用户输入的数字相同
} else {
System.out.println("您输入的数据不正确,系统推出!");
System.exit(0);
}
arr = new int[num][num];//实例化数组
moveRight(count, 0, 0);//调用右移函数
}
public static void moveRight(int count, int rowIndex,
int columnIndex) {//count表示移动几步,由题目可以看出右移时候次数和是用户输入的数字,下移减1,左移不变,上移减1,右移不变
if(judge()){//如果数组已经赋值结束,就打印出来
print();
}else{
int temp = 0;//临时变量
while (temp < count) {
arr[rowIndex][columnIndex] = currentNumber;
temp ++;//临时变量自增
columnIndex++;//向右移动
currentNumber++;//当前要打印的数字自增
}
count--;//将打印次数减1
columnIndex--;//下标归位
rowIndex++;//下移一位
moveDown(count,rowIndex,columnIndex);
}
}
public static void moveDown(int count,int rowIndex,int columnIndex) {
if(judge()){
print();
}else{
int temp = 0;
while(temp < count){
arr[rowIndex][columnIndex] = currentNumber;
temp ++;
rowIndex++;
currentNumber++;
}
rowIndex--;
columnIndex--;//左移一位
moveLeft(count, rowIndex, columnIndex);
}
}
public static void moveLeft(int count,int rowIndex,int columnIndex) {
if(judge()){
print();
}else{
int temp = 0;//临时变量
while(temp < count){
arr[rowIndex][columnIndex]=currentNumber;
temp ++;
columnIndex--;//左移一位
currentNumber++;//数字自增
}
count--;//次数减1
columnIndex++;
rowIndex--;//上移一位
moveUp(count, rowIndex, columnIndex);
}
}
public static void moveUp(int count,int rowIndex,int columnIndex) {
if(judge()){
print();
}else{
int temp = 0;
while(temp < count){
arr[rowIndex][columnIndex] = currentNumber;
temp ++;
rowIndex--;
currentNumber++;
}
rowIndex++;
columnIndex++;//右移一位
moveRight(count, rowIndex, columnIndex);
}
}
public static void print(){//在控制台打印
for(int row[]:arr){
for(int column:row){
System.out.print(column+"\t");
}
System.out.println();//换行打印
}
}
public static boolean judge(){
if(currentNumber>Math.pow(num, 2)){//如果数组已经赋值结束,就打印出来
return true;
}else{
return false;
}
}
}
分享到:
相关推荐
在编程领域,尤其是在C++语言中,生成螺旋数字矩阵是一种常见的算法问题。螺旋矩阵,也称为螺旋阵列,是将一个二维数组按照螺旋路径填充数字的一种方式。这种矩阵的填充规则是从左上角开始,向右填充一行,然后向下...
关于一个螺旋数字的java例子有注释,有控制台输入,希望对你有用
指南者稳盈一号指标期货傻瓜式买卖指标螺旋数字公式源码 本文档提供了一个基于 technical analysis 的交易指标,名为指南者稳盈一号指标期货傻瓜式买卖指标螺旋数字公式源码。该指标旨在帮助交易者更好地分析市场...
通达信菲波纳契螺旋数字主图指标.doc
(C卷,100分)- 螺旋数字矩阵(Java & JS & Python & C).html
华为OD机试 - 螺旋数字矩阵(Java & JS & Python & C & C++).html付费专栏内容,免费下载,多种语言解法
【免费题库】华为OD机试 - 螺旋数字矩阵(Java & JS & Python & C & C++).html
标题“Java实现螺旋数据”指的是在Java编程中创建一种特殊的数据结构,该结构按照螺旋顺序填充数字。描述进一步解释了具体实现方式:用户通过键盘输入一个介于1到20之间的整数,这个数字将决定矩阵的大小。然后,...
华为OD正版题库,CD卷,2024原题库。超低价可下载包含多种代码和解析,不用购买高价的专栏,任何问题可私信
私信博主获取三天体验卡,免费看所有华为OD真题、考试报告、手撕代码、面试记录
C++实现螺旋矩阵,螺旋数字排列,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环
在给定的场景中,我们需要实现一个程序,能够根据用户输入的数字n生成一个n×n的螺旋矩阵,并打印出来。例如,当输入为3时,输出的矩阵是: ``` 1 8 7 2 9 6 3 4 5 ``` 在这个螺旋矩阵中,数字从1开始,按照顺时针...
数字螺旋成像方法是近年来发展起来的一种新颖的成像技术,它与传统成像方法不同,能够捕捉到光波携带的轨道角动量信息,即在光束中编码的相位结构信息。该技术利用了数字螺旋成像(DSI)的概念,通过分析携带轨道...
螺旋桨三维数字模型的构建是现代制造工程中的一个重要环节,尤其在涉及到化学反应过程、食品加工、医药生产和发酵等领域。在这些行业中,搅拌操作作为加快物质混合速度、提高混合均匀性的关键技术,其核心部件之一...
在这个例子中,我们可以看到数字1在左上角,然后按照顺时针方向填充,直到填满整个矩阵。 构建螺旋方阵的方法有很多种,一种常见的做法是使用四个指针分别表示四个边缘(上、右、下、左),在每次填充一个元素后,...
随着数控技术的发展,现代螺旋桨大多采用数字控制技术进行加工,之后通过人工打磨达到更高的精度。 #### 六、结论 通过利用SolidWorks软件的三维建模功能,可以高效地构建螺旋桨的CAD数字化模型。通过对叶片曲率的...
螺旋矩阵是一种特殊的矩阵排列方式,它将数字按照顺时针或逆时针方向从左上角开始,沿着螺旋路径填充矩阵。在给定的MATLAB源程序中,我们看到两个程序,分别实现了顺时针和逆时针的螺旋矩阵。 1. 顺时针螺旋矩阵: ...
### 螺旋方阵知识点解析 #### 一、螺旋方阵定义与概念 螺旋方阵是一种特殊的矩阵结构,其元素按照从外向内、顺时针或逆时针方向呈螺旋状排列。这种排列方式使得矩阵中的数字呈现出一种规律性的美感。 #### 二、...
2. **工作频率**:在本案例中,天线工作在1.4GHz,这是一个常见的微波频率,适用于多种无线通信标准,如GPS和数字音频广播。设计时需确保天线在该频率下有良好的辐射性能。 3. **仿真步骤**:使用CST进行仿真,首先...
螺旋数组问题,相信很多人都做过了,初学者可以看一下,应该会有用处的。