Anonymous user
Magic squares of doubly even order: Difference between revisions
→{{headerJava}}: added Java
(added draft task) |
(→{{headerJava}}: added Java) |
||
Line 10:
; See also:
* [http://www.1728.org/magicsq2.htm Doubly Even Magic Squares (1728.org)]<br><br>
=={{header|Java}}==
<lang java>public class MagicSquareDoublyEven {
public static void main(String[] args) {
int n = 8;
for (int[] row : magicSquareDoublyEven(n)) {
for (int x : row)
System.out.printf("%2s ", x);
System.out.println();
}
System.out.printf("\nMagic constant: %d ", (n * n + 1) * n / 2);
}
static int[][] magicSquareDoublyEven(final int n) {
if (n < 4 || n % 4 != 0)
throw new IllegalArgumentException("base must be a positive "
+ "multiple of 4");
int bits = 0b1001011001101001;
int size = n * n;
int mult = n / 4;
int[][] result = new int[n][n];
for (int i = 0; i < size; i++) {
int bitsPos = (i % n) / mult + (i / (n * mult) * 4);
int value = (bits & (1 << bitsPos)) != 0 ? i + 1 : size - i;
result[i / n][i % n] = value;
}
return result;
}
}</lang>
<pre> 1 2 62 61 60 59 7 8
9 10 54 53 52 51 15 16
48 47 19 20 21 22 42 41
40 39 27 28 29 30 34 33
32 31 35 36 37 38 26 25
24 23 43 44 45 46 18 17
49 50 14 13 12 11 55 56
57 58 6 5 4 3 63 64
Magic constant: 260</pre>
|