zoukankan      html  css  js  c++  java
  • 数据结构(java语言描述)——串数组(n阶魔方)

    n阶魔方的思想:

    定义一个n*n阶数组,组委n阶魔方的数据结构,将1--n*n的数字填入其中:

    1:首先填写第一行,中间列的位置为1;

    2:下一个数填写在当前位置的上一行,下一列;若果存在一下情况则改正:

      1,当前行为第一行,则则下一个数由上一行改为最后一行,列仍为下一列;

      2,当前列为最后一列,则下一个数由下一列改为第一列,行仍为上一行;

      3,若果当前数的上一行,下一列的位置有数字,则改为下一行,相同列;

    重复以上过程直到n*n个数字填写完毕。

    规范代码:

    package chuanshu;
    import java.util.Scanner;
    public class mofang {
    public static void nmofang(int n){
    int [][] a=new int[n][n];
    int i=0,j=n/2;
    //a[i][j]=1;
    for(int k=1;k<=n*n;k++){
    a[i][j]=k;
    if(k%n==0){
    i=(i+1)%n;
    }else{
    i=(i-1+n)%n;
    j=(j+1)%n;
    }
    }
    for(i=0;i<a.length;i++){
    for(j=0;j<a.length;j++){
    System.out.print(a[i][j]+" ");
    }
    System.out.println();
    }
    }
    public static void main(String[] args){
    System.out.println("请输入要生成的魔方阶数:");
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    nmofang(n);
    }
    }

    结果:

    8 1 6
    3 5 7
    4 9 2

    不明白k%n的含义;

    自己理解的代码:

    package chuanshu;

    import java.util.Scanner;

    public class nmo {
    public static void mofang(int n){
    int [][] a=new int[n+1][n+1];
    int i,j;
    int k;
    i=0;j=n/2;
    while(i<n&&j<n){
    for(k=1;k<=n*n;k++){
    a[i][j]=k;
    if(i==0&&j==n-1){ i++;j=j;
    }
    else if(j==n-1){
    j=0;
    i=i-1;
    }
    else if(i==0){ i=n-1;
    j=j+1;
    }
    else if(a[--i][++j]!=0){
    i=i+2;
    j=j-1;
    }else{
    i--;
    j++;
    }
    }
    }
    for(i=0;i<n;i++){
    for(j=0;j<n;j++){
    System.out.print(a[i][j]+" ");
    }
    System.out.println();
    }
    }
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入要计算的魔方阶数:");
    int n=sc.nextInt();
    mofang(n);
    }
    }

    结果为:

    7 1 5
    3 0 6
    4 8 2

    不明白为什么4(2,0)后面直接跳到了(0,2),自己调试发现执行的i--;j++;按理说应该是:2-1=1;0+1=1,才对。

  • 相关阅读:
    Java实现AES加密
    spring定时任务详解(@Scheduled注解)
    springBoot 项目war包部署及改为war包后资源路径错误问题
    (转)如何在maven的pom.xml中添加本地jar包
    HttpClient MultipartEntityBuilder 上传文件
    Java BigDecimal详解
    mysq带条件的分页查询数据结果错误
    jstack生成的Thread Dump日志线程 分析
    jquery将表单序列化
    java jdk动态代理学习记录
  • 原文地址:https://www.cnblogs.com/xleer/p/5334927.html
Copyright © 2011-2022 走看看