навскидку.
| Код | const int MAX_X = 3; const int MAX_Y = 4;
int a[MAX_X][MAX_Y] = { { 1, 3, 12, -9 }, { 5, 24, 0, 54 }, { -1, 10, 4, -4 } };
// check x+x_offset row const bool checkXrow(const int x, const int y, const int x_offset) { // y-1 col if(y > 0 && a[x+x_offset][y-1] < a[x][y]) return true; // y col if(a[x+x_offset][y] < a[x][y]) return true; // y+1 col if(y < MAX_Y-1 && a[x+x_offset][y+1] < a[x][y]) return true; return false; }
// if any around more, than the element(x, y), return false const bool IsLocalMin(const int x, const int y) { // x-1 row if(x > 0 && checkXrow(x, y, -1)) return false; // x row if(checkXrow(x, y, 0)) return false; // x+1 row if(x < MAX_X-1 && checkXrow(x, y, 1)) return false; return true; }
int main(int argc, char* argv[]) { // print matrix for(int i = 0; i < MAX_X; ++i) { for(int j = 0; j < MAX_Y; ++j) cout << a[i][j] << "\t"; cout << endl; } // calculate number of local minimums int count = 0; for(int i = 0; i < MAX_X; ++i) for(int j = 0; j < MAX_Y; ++j) if(IsLocalMin(i, j)) count++; // print number of local minimums cout << "number of local minimums: " << count << endl; return 0; } |
идея простая: перебрать все элементы и каждый проверить на вшивость - является ли он локальным минимумом (по ходу дела проверяя выход за границы массива).
результат работы программы:
| Код | 1 3 12 -9 5 24 0 54 -1 10 4 -4 number of local minimums: 4 Press any key to continue
|
не отрицаю наличия более красивого решения. очень спешил . |