Magic Square in JavaA magic square is a square consisting of numbers. A magic square of the order n has the numbers from 1 to m^{2} (1 and m^{2 }inclusive) in such a way that the sum of all the numbers present in a row is equal to the sum of all the numbers present in a column, which in turn is equal to the sum of all the numbers present in a diagonal. If we represent the sum as M, then M is completely dependent on m. Mathematically M has the following value. M = m(m^{2} + 1) / 2. Thus, For m = 3, M = 3 x (3^{2}+ 1) / 2 = (3 x (9 + 1)) / 2 = (3 x 10) / 2 = 15 For m = 5, M = 5 x (5^{2}+ 1) / 2 = (5 x (25 + 1)) / 2 = (5 x 26) / 2 = 130 / 2 = 65 For m= 7, M = 7 x (7^{2}+ 1) / 2 = (7 x (49 + 1)) / 2 = (7 x 50) / 2 = 175 For m= 9, M = 9 x (9^{2}+ 1) / 2 = (9 x (81 + 1)) / 2 = (9 x 82) / 2 = 369 Let's see a few examples of magic squares. For m = 9, we have a magic square of 9 x 9, where each row, column, and diagonal have a value of 369. For m = 11, we have a magic square of 11 x 11, where each row, column, and diagonal have the value of 671. Rules for Filling the Magic SquareLet's discuss the ideas which will help us in writing the rules for filling the magic square. One thing we know for sure is that every number from 1 to m^{2} comes in the magic square. We will put the number 1 at the location (m / 2, m - 1), and then from there, we will consider each row and column as circular and hence will wrap around. Rule 1: At any position, the position of the next number is computed by decreasing the row number of the previously filled number by 1 and increasing the column number of the previously filled number by 1. At any point of time, if the calculated position of the row becomes -1, then we will wrap it around to m - 1. Similarly, if the calculated position of the column becomes m, then we will wrap it around to 0. Rule 2: If at the computed position, a number is already present in the magic square, then the computed position of the column is decreased by 2, and the computed position of the row is increased by 1. Rule 3: If the computed position of the row is -1 & the computed position of the column is m, then the new position will be: (0, m - 2). Let's take an example for a better understanding. 276 951 438 The above square matrix is of order 3, containing 9 elements. The position of the number 1 is (3 / 2, 3 - 1) = (1, 2) The position of the number 2 is (1 - 1, 2 + 1) = (0, 3) = (0, 0) [3 is wrapped around to 0] The position of the number 3 is (0 - 1, 0 + 1) = (-1, 1) = (3 - 1, 1) = (2, 1) [-1 is wrapped around to 3 - 1 = 2] The position of the number 4 is (2 - 1, 1 + 1) = (1, 2). However, the position of (1, 2) is already occupied by the number 1. Therefore, rule number 2 is applied, and we get (1 + 1, 2 - 2) = (2, 0). The position of the number 5 is (2 - 1, 0 + 1) = (1, 1) The position of the number 6 is (1 - 1, 1 + 1) = (0, 2) The position of the number 7 is ( 0 - 1, 2 + 1) = (-1, 3) = (0, 3 - 2) = (0, 1) [Rule number 3 is applied here] The position of the number 8 is ( 0 - 1, 1 + 1) = (-1, 2) = (3 - 1, 2) = (2, 2) [-1 is wrapped around to 3 - 1 = 2] The position of the number 9 is ( 2 - 1, 2 + 1) = (1, 3) = (1, 0) [3 is wrapped around to 0] ImplementationBased on the above example, the following code is written. FileName: MagicSquare.java Output: The Magic Square for 11: Sum of each column or row 671: 54 42 30 18 6 115 103 91 79 67 66 41 29 17 5 114 102 90 78 77 65 53 28 16 4 113 101 89 88 76 64 52 40 15 3 112 100 99 87 75 63 51 39 27 2 111 110 98 86 74 62 50 38 26 14 121 109 97 85 73 61 49 37 25 13 1 108 96 84 72 60 48 36 24 12 11 120 95 83 71 59 47 35 23 22 10 119 107 82 70 58 46 34 33 21 9 118 106 94 69 57 45 44 32 20 8 117 105 93 81 56 55 43 31 19 7 116 104 92 80 68 Time Complexity: The time complexity of the above program is O(n^{2}), where n is the total number of rows or columns present in the square matrix. Space Complexity: The space complexity of the above program is O(n^{2}), where n is the total number of rows or columns present in the square matrix. |