• 数据结构(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,才对。

  • 相关阅读:
    # bootstrap Grid System 柵格系统中“移动优先”的一个小体现[bootstrap ]
    ENGLISH HANDWRITING
    #PHP 类的多继承实现之 traits.md
    #linux vscode 保存总提示“Retry as sudo”
    #【php留存问题-2020年6月19日】,手动为数组添加一个间隔元素,再遍历的时候,提示索引为空
    #Linux 下 Xampp的安装与Hello World
    # 详细了解HTML5中的form表单
    # Promise的简单理解和基本使用
    #简单理解回调函数
    Java中几种常见的设计模式--工厂设计模式
  • 原文地址:https://www.cnblogs.com/xleer/p/5334927.html
Copyright © 2020-2023  润新知