Requirement: According to the input number N, such as: 3, 5, 7... to display n rows of n columns in a matrix, these numbers are from 1 ~ N * n: The sum of N numbers on each column of the Matrix and the diagonal line must be equal.
Prerequisites:
In the matrix, 1 is in the middle of the first line, and the subsequent numbers should be placed in the upper-right square of the previous number. If not, they will be placed in the bottom pane of the column; if not, place it to the far left of the row. If not, place it to the front and bottom of the previous number. If there is already a number in the target grid, put it to the front and bottom of the previous number.
Ideas:
1) Use a 2-dimensional array to prepare for storage ~ N * n
2) 1 is placed in the center of the first row, so the index number is: [0] [(n-1)/2]
3) for subsequent numbers, the index number principle is as follows:
1> the row index of num is num-1 (row index-1), and the column index of num is num-1 (column index + 1)
2> If the row and column indexes of num are found to be out of BITs (-1 or N ),
The row index of num is num-1 (row index + 1), and the column index of num is num-1 (column index)
3> If the row of num is found and the column index points to a number
The row index of num is num-1 (row index + 1), and the column index of num is num-1 (column index)
4> If the row bitwise of num is found (-1 ),
Row indexes of num are n-1.
5> If the column of num is found to be n
The column index of num is 0.
The following is the implementation of Java and JavaScript.
**************************************** **************************************** ***********
Grid9.java
---------------------------------------------------
Import java. util. collections;
Class grid9 {
Public static void main (string [] ARGs ){
Pipeline SC = new pipeline (system. In );
System. Out. println ("Enter the number of rows :");
Int n = SC. nextint ();
System. Out. println ();
// N must be an odd number
If (N % 2 = 0)
N --;
// N must be greater than or equal to 3
If (n <3)
N = 3;
// Create an array --> similar to a double-layer set, which can be similar to a multi-dimensional array
// All members are initialized to 0
Int [] [] ary = new int [N] [N];
// The center of a row
Int mid = (n-1)/2;
// Current number
Int num = 1;
// Current row and column
Int currrow = 0;
Int currcol = mid;
// The next row and column
Int nextrow, nextcol;
While (Num <= N * n ){
Ary [currrow] [currcol] = num;
Num ++; // The next number.
Nextrow = currRow-1; // The row index of the next number
Nextcol = currcol + 1; // column index of the next number
// If the row and column indexes of the next number are invalid, the row index is changed to (the row index + 1 of the current number), and the column index is changed to (the column index of the current number)
If (nextrow <0 & nextcol> = N ){
Nextrow = currrow + 1;
Nextcol = currcol;
}
// If the row index of the next number is smaller than 0, change the row index to (5-1)
Else if (nextrow <0 ){
Nextrow = n-1;
}
// If the column index of the next number is equal to 5, the column index is changed to (0)
Else if (nextcol> = N ){
Nextcol = 0;
}
// If a value already exists at the place where the next number should be placed, the row index is changed to (the row index + 1 of the current number) and the column index is changed to (the column index of the current number)
Else if (ary [nextrow] [nextcol]> 0 ){
Nextrow = currrow + 1;
Nextcol = currcol;
}
// Change the current row to the next row to store the next number.
Currrow = nextrow;
Currcol = nextcol;
}
// Print the 9th percentile data
For (INT I = 0; I <n; I ++ ){
For (Int J = 0; j <n; j ++ ){
System. Out. Print (ary [I] [J] + "/t ");
}
System. Out. println ();
}
}
}
**************************************** **************************************** ***********
Grid9.html
---------------------------------------------------
<SCRIPT>
VaR n = prompt ("Enter the number of rows:", "3 ");
N = parseint (N );
// N must be an odd number
If (N % 2 = 0)
N --;
// N must be greater than or equal to 3
If (n <3)
N = 3;
// Create an array --> similar to a double-layer set, which can be similar to a multi-dimensional array
// All members are initialized to 0
VaR ary = new array ();
VaR aryline;
For (VAR I = 0; I <n; I ++ ){
Aryline = new array (N );
Ary. Push (aryline );
}
// The center of a row
VaR mid = (n-1)/2;
// Current number
VaR num = 1;
// Current row and column
VaR currrow = 0;
VaR currcol = mid;
// The next row and column
VaR nextrow, nextcol;
While (Num <= N * n ){
Ary [currrow] [currcol] = num;
Num ++; // The next number.
Nextrow = currRow-1; // The row index of the next number
Nextcol = currcol + 1; // column index of the next number
// If the row and column indexes are invalid, the row index is changed to (the row index of the current number + 1), and the column index is changed to (the column index of the current number)
If (nextrow <0 & nextcol> = N ){
Nextrow = currrow + 1;
Nextcol = currcol;
}
// If the row index of the next number is smaller than 0, change the row index to (5-1)
Else if (nextrow <0 ){
Nextrow = n-1;
}
// If the column index of the next number is equal to 5, the column index is changed to (0)
Else if (nextcol> = N ){
Nextcol = 0;
}
// If a value already exists at the place where the next number should be placed, the row index is changed to (the row index + 1 of the current number) and the column index is changed to (the column index of the current number)
Else if (ary [nextrow] [nextcol]! = NULL ){
Nextrow = currrow + 1;
Nextcol = currcol;
}
// Change the current row to the next row to store the next number.
Currrow = nextrow;
Currcol = nextcol;
}
Document. Write ("<Table border = '1'> ");
For (VAR I = 0; I <n; I ++ ){
Document. Write ("<tr> ");
For (var j = 0; j <n; j ++ ){
Document. Write ("<TD>" + ary [I] [J] + "</TD> ");
}
Document. Write ("</tr> ");
}
Document. Write ("</table> ");
</SCRIPT>