Matrix75. Дана матрица размера M \times N. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.
Решение:
1 2 3 4 5 6 7 8 9 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 |
#include <stdio.h> int main(void) { int b[10][10],a[10][10]; int m,n; printf("M: "); scanf("%i",&m); printf("N: "); scanf("%i",&n); int i,j; for (i=0; i<m; ++i){ printf("%i : \n", i+1); for (j=0; j<n; ++j){ printf("%i : ", j+1); scanf("%i", &a[i][j]); } } int num; for (i=0; i<m; ++i){ for (j=0; j<n; ++j){ num=0; if (i-1>=0) { if (a[i][j]>a[i-1][j]) num++; } else ++num; if ((i+1)<m){ if (a[i][j]>a[i+1][j]) num++; } else ++num; if (j-1>=0) { if (a[i][j]>a[i][j-1]) num++; } else ++num; if ((j+1)<n){ if (a[i][j]>a[i][j+1]) num++; } else ++num; if (num==4) b[i][j]=-a[i][j]; else b[i][j]=a[i][j]; } } for (i=0; i<m; ++i) for (j=0; j<n; ++j) a[i][j]=b[i][j]; for (i=0; i<m; ++i){ for (j=0; j<n; ++j) printf(" : %i", a[i][j]); printf(" : \n"); } return 0; } |
Другие задачи из раздела Matrix можно посмотреть здесь.
Комментарии: