首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Magic测试.txt文件

为Magic测试.txt文件
EN

Stack Overflow用户
提问于 2015-11-10 07:46:04
回答 2查看 1.1K关注 0票数 2

我不想问,但我想不出这个任务,当我寻求帮助时,助教也不知道。

我必须从文本文件中获取输入,将文件中的整数输入到数组列表中,并测试它是否为n×n幻方。N等于数组列表长度的平方根。如果它不是一个完美的正方形,它就会立即通过魔法平方测试。

无论如何,我已经快完成了;我只是不明白我的教授在魔术平方测试的最后一步告诉我们/要求我们做什么。

最后四个步骤之前的所有测试都是完美无缺的。我将在步骤之后发布我的当前代码。

  1. 设rowSums和colSums是长度为n的两个数组,所有条目都为零。另外,让sumDiagMajor和sumDiagMinor分别代表表的左上角到右下角和右上至左下的对角线上的条目之和。
  2. 设指数=0
  3. 重复直到索引= n2 (a) ArrayList{ index } (b)增量colSumscol由ArrayList{index} (c)如果row = col,则由ArrayList{index}递增sumDiagMajor。(d)如果row + col =n sumDiagMinor 1,则ArrayList{−} (e)增量指数增加1
  4. 如果sumDiagMajor等于sumDiagMinor以及rowSums和colSums的每个条目,那么表就是一个幻方;否则,它就不是。
代码语言:javascript
复制
   int rowSums[] = new int[_n];
   int colSums[] = new int[_n];
   int sumDiagMajor = 0;
   int sumDiagMinor = 0;

   int row, col;
   row = col = 0;

   for (int index = 0; index < (n*n); index++)
   {          
       rowSums[row] = rowSums[row] + magicSquare.get(index);
       colSums[col] = colSums[col] + magicSquare.get(index);

       if (row == col)
       {       
           sumDiagMajor = sumDiagMajor + magicSquare.get(index);   
       }

       if ((row + col) == (n - 1))
       {
           sumDiagMinor = sumDiagMinor + magicSquare.get(index);   
       }

   }

   System.out.println(sumDiagMajor);
   System.out.println(sumDiagMinor);

我的问题包括:我是否正确地递增了数组rowSums和rowCols?他从来没有说过如何处理行或科尔,所以将它们初始化为零是最好的选择吗?

如果到目前为止,我所做的一切都是正确的,那么sumDiagMajor怎么可能等于sumDiagMinor,因为行总是等于cols,所以第二个嵌套的If语句永远不会运行。因此,它将排除一切测试作为一个魔术广场?

很抱歉发了这么长的邮件,但这很让人困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-10 08:15:44

根据您最新的要求。一个完整的例子。

代码语言:javascript
复制
public static void main(String[] args) {
    List<Integer> magicSquare = Arrays.asList(2,7,6,9,5,1,4,3,8);

    int n = (int) Math.sqrt(magicSquare.size());
    int rowSums[] = new int[n];
    int colSums[] = new int[n];
    int sumDiagMajor = 0;
    int sumDiagMinor = 0;

    int row = -1;
    int col = -1;

    for (int index = 0; index < n*n; index++) {

        col++;
        if (col % n == 0) {
            row++;
            col = 0;
        }

        rowSums[row] = rowSums[row] + magicSquare.get(index);
        colSums[col] = colSums[col] + magicSquare.get(index);


        if (row == col)
        {
            sumDiagMajor += magicSquare.get(index);
        }

        if ((row + col) == (n - 1))
        {
            sumDiagMinor += magicSquare.get(index);
        }

    }

    boolean isMagicSquare = true;
    for (int i = 0; i < n && isMagicSquare; i++) {
        isMagicSquare = sumDiagMajor == rowSums[i] && sumDiagMajor == colSums[i];
    }
    isMagicSquare = isMagicSquare && sumDiagMajor == sumDiagMinor;

    System.out.println(isMagicSquare); // true
}
票数 3
EN

Stack Overflow用户

发布于 2015-11-10 08:06:08

您从不更改for-循环中的rowcol,这是一个bug。为了更容易理解,我建议在rowIndex和colIndex上使用两个嵌套的For -循环,并使用一个小助手从一维数组中获得值,如下所示:

代码语言:javascript
复制
int getValue(int row, int col){
    return magicSquare.get( row * _n + col );
}

假设一维阵列是一个“扁平”的正方形,它像(0, 0),(0,1),……(0,_n),(1,0),……(_n,_n)

为了使它更清楚:迭代平方,而不是使用索引:

代码语言:javascript
复制
for( int row = 0 ; row < _n ; row++){
    for( int col = 0 ; col < _n ; col++){
       // Your stuff here.
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33625056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档