0
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
public static boolean isMagicSquare(int[][] a) {
boolean isMagic = true;
boolean isSquare = true;
//square? checking here.
for(int i = 0; i < a.length; i++) {
if(a.length != a[i].length) {
isSquare = false;
}
}
if(isSquare) {
int sum = 0;
int nextSum = 0;
//first row
for(int i = 0; i < a.length; i++) {
sum += a[0][i];
}
//rows
for(int i = 1; i < a.length; i++) {
for(int j = 0; j < a.length; j++) {
nextSum += a[i][j];
}
if(nextSum != sum) {
isMagic = false;
break;
} else {
nextSum = 0;
}
}
//columns
if(isMagic) {
for(int i = 0; i < a.length; i++) {
for(int j = 0; j < a.length; j++) {
nextSum += a[j][i];
}
if(nextSum != sum) {
isMagic = false;
break;
} else {
nextSum = 0;
}
}
//diagonals
if(isMagic) {
for(int i = 0; i < a.length; i++) {
nextSum += a[i][i];
}
if(nextSum != sum) {
isMagic = false;
} else {
nextSum = 0;
}
if(isMagic) {
int j = a.length - 1;
for(int i = 0; i < a.length; i++) {
nextSum += a[i][j];
if(j > 0) {
j--;
}
}
if(nextSum != sum) {
isMagic = false;
}
}
}
}
} else {
isMagic = false;
}
return isMagic;
}
Write a method called isMagicSquare that accepts a two-dimensional array of integers as a parameter and returns true if it is a magic square. A square matrix is a magic square if it is square in shape (same number of rows as columns, and every row the same length), and all of its row, column, and diagonal sums are equal. For example, [[2, 7, 6], [9, 5, 1], [4, 3, 8]] is a magic square because all eight of the sums are exactly 15.
(https://practiceit.cs.washington.edu/problem/view/bjp3/chapter7/e20%2DisMagicSquare)
Работает, но код нечитаемый. Как сократить? Понятия не имею.
Запостил: imrnccc,
28 Марта 2021
imrnccc 28.03.2021 18:19 # 0
PolinaAksenova 28.03.2021 18:22 # +5
Для нячаля выкинуть книжку, в которой написано про один return. Тут как с попом на пляже: либо одновозврат снять, либо длинный код нядеть.
imrnccc 28.03.2021 19:07 # 0
bormand 28.03.2021 18:33 # +3
Ну что, начинаем специальную олимпиаду?
KoWe4Ka_l7porpaMMep 28.03.2021 18:44 # 0
imrnccc 28.03.2021 19:07 # 0
KoWe4Ka_l7porpaMMep 28.03.2021 19:11 # +2
Я так в «2048» сделал из четырёх циклов для четырёх свайпов – один цикл. Это моё самое большое достижение в жизни, я им очень горжусь.
bormand 28.03.2021 19:51 # 0
KoWe4Ka_l7porpaMMep 29.03.2021 03:01 # 0
CHayT 28.03.2021 19:14 # +5
bormand 28.03.2021 19:44 # +4
З.Ы. Жаль я жабий linq не знаю.
PolinaAksenova 28.03.2021 20:20 # +4
https://wandbox.org/permlink/d7PT5YWjB6DfBmTN
Можня это всё переписать на компайл-тайм std::array<>, но так ня интересно (и компилятор страдать будет меньше).