`

java关于输出n*n的序列问题

 
阅读更多

要求实现下面的效果:

输入5:

输出结果为:

   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

 

输入6:

输出结果为:

   1   2   3   4   5  6
 20 21 22 23 24  7
 19 32 33 34 25  8
 18 31 36 35 26  9
 17 30 29 28 27 10
 16 15 14 13 12 11

 

代码实现如下

import java.util.Scanner;
/**
 * @description 实现功能见运行结果
 * @author srong
 * @version 1.0 2011-9-9
 */
public class TestNum {
 public static void main(String[] args) {
  //定义标准输入流,与System.in关联
  Scanner in = new Scanner(System.in);
  System.out.println("请输入一个任意大于0的整数(若输入的值是大于0的小数,则只取整数舍去小数):");
  //定义用户输入的值,用户可以输入小数,整数,但是num只存取整数值
  //尚未控制不允许输入字符,如果输入字符后台会抛错
  int num = (int)in.nextDouble();
  //定义一个num长num宽的二维数组
  int numbers[][] = new int[num][num];
  int i = 0;//i控制循环次数
  int k = 0;//k控制行
  int j = 0;//j控制列
  int temp = 0;//temp存放当前得到的值
  //判断num的值是否大于0
  if (num > 0) {
   //num*num是在整个矩阵最中心的位置,而得到这个值是在最后才得到的,并且通过众多的举例可得到共循环num/2+1次
   for (; i < num / 2+1; i++) {
    //因为整个矩阵是按行列循环,每循环完一个正方形,行列的的下标相等
    k = i;
    for (j = i; j < num - i; j++) {//按从左到右,计算每行的各值
     temp = temp + 1;
     numbers[k][j] = temp;
    }
    //从左到右,每行的最后一个值得到后,则列下标不变,行下标加1
    k ++;
    for (; k < j; k++) {//从上到下,计算每列的各值
     temp = temp + 1;
     numbers[k][j - 1] = temp;
    }
    //从上到下,每一列的最后一个值得到后,则行下标不变,列下标减1
    k = j - 1;
    for (j = j - 2; j > i - 1; j--) {//从右到左,计算每行的各值
     temp = temp + 1;
     numbers[k][j] = temp;
    }
    //从左到右,每一行的最后一个值得到后,则列下标不变,行下标依次减1
    j = j + 1;
    k = k - 1;
    for (; k > i; k--) {//从下到上,计算每列的各值
     temp = temp + 1;
     numbers[k][j] = temp;
    }
   }
   //格式化数据二维数据的值
   for (i = 0; i < num; i++) {
    for (j = 0; j < num; j++) {
     System.out.printf("%3d", numbers[i][j]);
    }
    System.out.println();
   }
  } else {
   System.out.println("输入的数据不合法!");
  }
 }
}

 

分享到:
评论

相关推荐

    3_输出n层正方形_输出N层正方形图案_

    标题中的“3_输出n层正方形_输出N层正方形图案_”指的是一个编程任务,要求编写一个程序,能够根据用户输入的层数n,输出相应的n层正方形图案。这种图案通常由数字组成,每一层的数字递增,然后在下一层回溯到原来的...

    n*n数码难题

    在这款游戏中,玩家需要通过一系列操作,将随机生成的n*n个数码排列成1到n*n的有序序列,这一过程既锻炼了逻辑思维,又体现了人工智能的潜在应用。 首先,我们要理解"8数码难题"的基本规则。这个经典游戏通常在一个...

    java产生一个N位随机序列

    ### Java生成N位随机序列详解 #### 一、概述 在Java编程中,有时我们需要生成一个特定长度(N位)的随机序列。这样的序列可以用于多种应用场景,比如密码学中的密钥生成、抽奖系统的随机选号等。本文将详细介绍...

    回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列

    根据给定文件的信息,本文将深入探讨如何使用回溯法来输出自然数1到n的...以上就是关于如何使用回溯法输出自然数1到n的所有不重复排列(即n的全排列)的详细介绍及Java实现。希望对读者理解回溯法及其应用有所帮助。

    JAVA输入输出流实验报告

    Java中的输入输出流是程序与外部数据交互的重要方式,它允许我们读取和写入数据到各种来源,如键盘、文件、网络等。在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验...

    java源代码--求n个奇数的和

    在Java编程语言中,我们经常需要处理各种数学问题,其中包括计算特定序列的和。这个Java源代码示例展示了如何利用`for`循环求解前n个奇数的和。在这个程序中,`for_yuju1`类定义了一个名为`method`的静态方法,该...

    Java求最大子列问题(输出最长子列)

    Kadane's Algorithm 是一种在 O(n) 时间复杂度内解决最大子序列和问题的有效方法,其中 n 代表数组的长度。它的核心思想是通过遍历数组,维护两个变量:当前子序列的和以及到目前为止找到的最大子序列和。对于每个...

    java数据结构面试题-数据结构试题.docx

    在Java编程中,理解数据结构对于解决复杂问题至关重要,尤其是在面试中,面试官经常通过数据结构相关的题目来评估候选人的逻辑思维和算法能力。以下是一些基于给定题目解析的数据结构知识点: 1. **时间复杂度**: ...

    JAVA实现a*算法八数码问题

    【标题解析】:“JAVA实现a*算法八数码问题”指的是使用Java编程语言实现了一种解决八数码游戏(也称为滑动拼图游戏)的A*搜索算法。八数码游戏通常在一个3x3的网格上进行,有8个带有数字的方块和一个空白格子,目标...

    JAVA编写序列求和

    使用Java编译器(`javac`)编译源文件,然后运行生成的字节码文件(`java SequenceSum`),你将看到序列的和输出到控制台。 这个简单的Java程序展示了如何处理序列求和问题,对于初学者来说,它涉及到了变量、循环...

    JAVA语言与编程第8章Java输入输出系统.ppt

    Java 输入输出系统是Java编程语言中的重要组成部分,用于处理数据的传输、存储和读取。在Java中,输入输出操作主要分为字节流和字符流两大类,它们都是基于流的概念,即数据按照流动的方式进行处理。本篇将详细介绍...

    输出1到n的所有排列

    全排列是组合数学中的一个重要概念,...总结来说,本示例通过回溯法实现了全排列问题的求解,展示了如何利用编程来生成一个整数序列的所有可能排列,这对于理解和应用回溯法解决其他类似的组合问题具有重要的参考价值。

    浅谈Java的输入输出流.pdf

    ### Java的输入输出流概述 #### 一、引言 Java 的输入输出(I/O)功能强大且灵活,为开发者提供了处理各种数据源的能力。I/O 操作涉及到的数据源包括但不限于文件、内存、网络连接等。尽管 I/O 操作强大,但其复杂...

    w3school_Java&JSP;教程

    例如,“public static void main(String[] args)” 是每个 Java 程序的入口点,而 System.out.println() 则用于输出信息到控制台。 **Java中的对象** Java 是一种面向对象的语言,这意味着几乎所有的代码都是围绕...

    最长公共子序列(java实现)

    总的来说,通过理解LCS的概念、动态规划的原理以及Java代码的实现,我们可以有效地解决两个序列的最长公共子序列问题,并将其应用于序列比对、文本编辑距离计算等多个领域。学习和掌握这种算法对于提升编程能力和...

    (超赞)JAVA精华之--深入JAVA API

    - `ObjectInputStream` 和 `ObjectOutputStream` 支持序列化和反序列化 Java 对象。 - **字符流** - `InputStreamReader` 和 `OutputStreamWriter` 用于读写字符数据,通常与编码解码相关联。 - **随机存取文件*...

    Java笔记.txt

    **转义序列**:Java 支持多种转义序列来表示特殊字符,例如 `\n` 表示换行,`\t` 表示制表符等。 ### 6. Java 运算符与表达式 **算术运算符**:包括加减乘除等。需要注意的是,在进行除法运算时,默认情况下会向下...

    java 初学者 必看的一些资料 清单

    2. **IO流**:学习输入/输出流,包括文件操作、网络通信和对象序列化。 3. **反射**:Java的反射机制允许在运行时检查和修改类、接口、字段和方法。 4. **设计模式**:学习常见的设计模式如工厂模式、单例模式、...

Global site tag (gtag.js) - Google Analytics