首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中魔术方块中的完全缺失元素

java中魔术方块中的完全缺失元素
EN

Stack Overflow用户
提问于 2020-06-30 01:20:48
回答 1查看 147关注 0票数 0

我正在创建一个程序来完成3*3魔法方块中缺少的元素。幻方是二维数组n *n,在幻方中,每一行和等于列和,等于对角和。而且,所有的元素都是独一无二的。

这就是一个例子:

代码语言:javascript
复制
2  7  6            2  7  6
9  0  0 ---------> 9  5  1 
0  0  0            4  3  8

我就是这样做的:

代码语言:javascript
复制
import java.io.*;

    class asdf {
        public static void main (String[] args) {
            int sum = 0;
            int index = 0;
         int [][]arr = {
                 {12,17,10},
                 {11,0,0},
                 {0,0,0}
         } ;
            for (int i = 0;i<3;i++){
                sum += arr[index][i];
            }
         arr[2][0] = sum - (arr[0][0]+arr[1][0]);
          arr[1][1] = (arr[0][2]+arr[2][0])/2;
          arr[1][2] = sum-(arr[1][0]+arr[1][1]);
          arr[2][1] = sum - (arr[0][1]+arr[1][1]);
            arr[2][2] = sum - (arr[0][2]+arr[1][2]);
         for (int i = 0;i<3;i++){
             for (int j = 0;j<3;j++){
                 System.out.print(arr[i][j]+" ");
             }
             System.out.println();
         }
        }
    }

但是我认为这种思维方式没有效率,所以我该怎么办呢?

EN

回答 1

Stack Overflow用户

发布于 2020-07-07 09:17:04

通常,这类问题应该通过回溯来解决,但是在幻方的情况下,有一种特殊的模式,可以通过使用索引来实现。这里是java程序。

n:方阵的大小

初始:从哪个数字幻方开始(如它的1)

initialRow/initialCol:初始种子应从哪个位置开始(如1、2)

以下是用javascript编写的相同程序

代码语言:javascript
复制
var n=3;
var initial=1;
var initialRow = 1;
var initialCol = 2;
var a = [[]];


    
function computeMagicSquare(){
  var p = {}
  p.row = initialRow;
  p.col = initialCol
  for(let i=0;i<n;i++){
      for(let j=0;j<n;j++){
          choosePos(p);
        a[p.row][p.col] = initial++;
        
        p.row--;
        p.col++;
      }
  }
}
function choosePos(p){
  normalizePos(p);
  if(a[p.row][p.col]!=0){
    p.row++;
    p.col++;
    choosePos(p);
  }    
}
function normalizePos(p){
  if(p.row<0){
      p.row = n-1;
  } 
  if(p.col<0){
      p.col = n-1;
  }
  p.row = p.row%n;
  p.col = p.col%n;
}
function printArray(){
  let row;
  for(let i=0;i<n;i++){
    row = '';
    for(let j=0;j<n;j++){
     row+=a[i][j]+' ';
    }
    console.log(row);
  }
}
function initializeArray(){
  for(let i=0;i<n;i++){
         a[i]=[];
      for(let j=0;j<n;j++){
          a[i][j]=0;
      }
    }       
}  
if(n%2==0){
  console.log('n should be odd number');
} else {
  initializeArray();
  computeMagicSquare();
  printArray();
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62648947

复制
相关文章

相似问题

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