当前位置: 首页 > 知识库问答 >
问题:

如何只用1维数组生成幻方?

袁翰池
2023-03-14

我被指派提示用户给出一个幻方的顺序(一个3阶的幻方将是一个3x3矩阵),然后生成一个该顺序的幻方,而不使用二维数组。

以下是我所知道和理解的:

    null

以下是我得到但不明白如何正确实现的内容:

>

  • row=order-1,col=order/2和i=1
  • 重复以下步骤,直到i=订单^2+1:

    (a)魔力[指数]=i

       i. row = (row + order − 2) % order
    
       ii. col = (col + order − 1) % order
    
    package magicsquarecreator;
    
    import java.io.IOException;
    import java.util.Scanner;
    
    
    public class MagicSquareDemo
    {
       public static void main(String[] args) 
       {
          Scanner keyIn = new Scanner(System.in); 
          String option; 
          do
          {
             System.out.println();        
             System.out.println("             MAGIC SQUARE APPLICATION             ");
             System.out.println("==================================================");
             System.out.println("Generate a Magic Square........................[1]");
             System.out.println("Test for a Magic Square........................[2]");
             System.out.println("Quit the Program...............................[0]");
             System.out.println();
             System.out.print("Select an option -> ");
             option = keyIn.next(); 
             System.out.println(); 
    
             switch(option)
             {
                case "1": 
                   try
                   {
                        System.out.println("Enter the dimension of the magic square -> ");
                        int order = keyIn.nextInt();
                        if (order < 1)
                        {
                            System.out.println("The order must be positive and odd");
                        }
                        else if (order % 2 == 0)
                        {
                            System.out.println("The program can only generate a magic square"
                                    + "\nwhose dimension is positive odd number.");
                        }
                        else if (order % 2 != 0)
                        {
                            int i=1, j=1;
                            int row = order - 1;
                            int col = order/2;
                            int[] magic = new int[order*order];
                            for (i=1; i<=order; i++)
                            {
                                magic[i] = i;
                                row = (row + 1) % order;
                                col = (col + 1) % order;
                                if (magic[i] != 0)
                                {
                                  row = (row + order − 2) % order;
                                  col = (col + order − 1) % order;
                                }
                            }
                        }
                   }
                   catch(IOException e)
                   {
                      System.out.println(e);
                   }
                   break;                    
                case "2": 
                   try
                   {
    
    
                   }
                   catch(IOException e)
                   {
                      System.out.println(e);
                   }
                   break;    
                case "0": 
                   break;    
                default: System.out.println("Invalid choice...please select a valid menu option.");
             }
          } 
          while (option.compareTo("0") != 0); 
       } 
    }
    
  • 共有1个答案

    任昊苍
    2023-03-14

    老实说,我也没有真正理解taks,因为它是从你那里写的。如果我按照我的理解去做,它是不起作用的。但我看了看它应该如何工作,最后我得到了它。以下是else if(order%2!=0)条件作为方法的部分(我测试了它,它现在正在工作):

    public static void magicSqare(int order){
        System.out.println(order);
        int row = order - 1;
        int col = order /2;
        int [] magic = new int [order*order];
        int index;
    
        index = (row)*order + col;
        magic[index]= 1;
    
        for (int i = 2; i <= order*order; i++) {
            if (magic[((row +1) % order)*order + ((col +1) % order)] == 0) {
            row = (row +1) % order;
            col = (col +1) % order;
            }
    
            else {
                row = (row + order -1) % order;
                //col = (col + order -1) % order;
            }
            index = (row)*order + col;
            magic[index]= i;
        }
    
        //System.out.println(Arrays.toString(magic));
    }
    
     类似资料:
    • 本文向大家介绍NumPy 如何生成多维数组的方法,包括了NumPy 如何生成多维数组的方法的使用技巧和注意事项,需要的朋友参考一下 Python现在是最热门的人工智能语言,各种工具的支持如Google的Tensorflow,都是首选支持Python的。 但是,与R语言不同,Python语言设计时,并没有考虑对于矩阵运算,统计计算等功能做专项支持。于是我们需要NumPy库来补足这一能力上的不足。 N

    • 问题内容: 我想知道如何将2维数组转换为1维数组。我想出了一些代码,但是它似乎并不起作用。有人可以帮帮我吗?谢谢。 [edit]非常感谢。是否可以将String [] []中的每一行转换为String []中的索引,例如,如果我们转换String [] [](以上代码),那么当我打印出array [0]时,它应该打印哑巴,哑巴,哑巴[编辑] 问题答案: 或一次添加整行: 编辑: 从对我的答案的评论

    • 我有生成SHA-1哈希的代码: 有没有办法将< code>hash转换成Guid(我猜是type 5,以便与SHA-1保持一致)?

    • 本文向大家介绍使用js生成1-10000的数组相关面试题,主要包含被问及使用js生成1-10000的数组时的应答技巧和注意事项,需要的朋友参考一下 循环处理 使用 把一个 iterator 数据转换成真正的数组

    • 本文向大家介绍用.NET如何生成二维码,包括了用.NET如何生成二维码的使用技巧和注意事项,需要的朋友参考一下 下面介绍一下如何用.NET生成二维码(QR Code码制),下面给出详细步骤: 1、新建一个window应用程序,然后引入.NET二维码类库(开源的类库,可从网上下载): 2、构建UI界面,代码如下: 图形如下所示:   3、编写 编码和解码按钮事件,进行编码和解码处理: 4、编译运行,

    • 我们知道,3以上的所有素数都可以通过以下方法生成: 然而,由上述公式生成的所有数字都不是素数。 为了消除这种情况,我使用了筛法,并删除了数字,这些数字是由上述公式生成的数字的因子。 利用事实: 如果一个数没有质因数,它就被称为质因数。 因为我们可以使用上述公式生成所有素数 如果我们能去掉以上数字的所有倍数,我们只剩下质数 生成低于1000的素数。 然而,这种方法确实正确生成质数。这运行得更快,因为