У меня есть двумерный массив символов, где все числа, кроме одного * (как показано на рисунке (два примера)
Моя задача — суммировать все соседние целые числа (в примере 1 соседи * равны 4,2,5,8, а сумма равна 4 + 2 + 5 + 8 = 19).
Но в примере 2 * не имеет Топ сосед.
Мой начальный код был похож на:
arr[i-1][j] + arr[i+1][j] + arr[i][j-1] + arr[i][j+1]
Но потом я понял, что в случае, как а [0] [- 1] не существует Так что вы можете помочь мне решить мою проблему
Вы должны явно проверить каждый. Следующее должно работать:
bool inRange(int i, int j) {
const auto n = 4; // you need to set this somewhere, or pass it in
return (i >= 0) && (i < n) && (j >= 0) && (j < n);
}
auto sum = (inRange(i-1, j) ? arr[i-1][j] : 0)
+ (inRange(i+1, j) ? arr[i+1][j] : 0)
+ (inRange(i, j-1) ? arr[i][j-1] : 0)
+ (inRange(i, j+1) ? arr[i][j+1] : 0);
Вы, вероятно, можете написать это немного чище, но вам нужно проверять не только -1, но и время, когда вы идете больше 3.
У этой проблемы может быть несколько решений, но если вы хотите избежать проверки границ каждый раз, вы можете расширить размер матрицы на 1, чем нужно. Это означает, что если у вас есть массив:
1 * 4 7
8 9 2 3
5 1 2 4
4 3 6 5
Реализуйте это как:
0 0 0 0 0 0
0 1 * 4 7 0
0 8 9 2 3 0
0 5 1 2 4 0
0 4 3 6 5 0
0 0 0 0 0 0
Это даже не повлияет на вашу сумму в конце.