2017-02-08 8 views
0

Я работал над некоторым кодом, который создавал бы магический квадрат, который в основном представляет собой массив 2d размером n x n с элементами от 1 до n^2 с каждым столбцом, строкой и диагональным суммированием до одного и того же числа.Как создать несколько массивов 2D Magic Square?

вот что у меня до сих пор, проблема в том, что он создает один и тот же массив 2d каждый раз. Я начинаю с размещения 1 в крайнем правом ряду. Будет ли такой же подход позволить мне создать еще 3 магических квадрата?

std::cout << "Enter the size of a magic square: \n"; 
    int n; 
    std::cin >> n; 
    int magicSquare[n][n]; 

    // set all slots as 0 
    memset(magicSquare, 0, sizeof(magicSquare)); 

    // Initialize position for 1 
    int row = n/2; 
    int col = n-1; 


    for (int num=1; num <= n*n;) 
    { 
     if (row==-1 && col==n) 
     { 
      row = 0; 
      col = n-2; 
     } 
     else 
     { 

      if (col == n) 
       col = 0; 

      if (row < 0) 
       row=n-1; 
     } 
     if (magicSquare[row][col]) 
     { 
      col -= 2; 
      row++; 
      continue; 
     } 
     else 
      magicSquare[row][col] = num++; 

     col++; 
     row--; 
    } 

ответ

1

Да, вы можете. Волшебные квадраты показывают reflection symmetry.

Вы можете использовать это свойство, чтобы сделать дополнительные магические квадраты, как например:

Вот база 3х3 магический квадрат генерируется с помощью вашей программы:

2 9 4 
7 5 3 
6 1 8 

+1: такой же квадрат зеркальный горизонтальный:

4 9 2 
3 5 7 
8 1 6 

+2: Оригинальный квадратный зеркальные вертикально:

6 1 8 
7 5 3 
2 9 4 

+3: оригинальный квадрат зеркально по горизонтали и вертикали:

8 1 6 
3 5 7 
4 9 2 

Все удовлетворяют свойства магических квадратов.

+0

Вы также можете зеркально отразить его по диагональным осям, и вы получите еще два магических квадрата. – Steeve