@Dora_Creative

Как решить данную задачу на двумерные массивы c++?

Преподавателя не устроил мой иррациональный вариант и нужно сделать его компактнее
мой код:
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
 const int N=3, M=4;
 int A[N][M]={{1,1,1,1},{1,1,1,1}, {1,1,1,1}}, B[N][M];
 for (int i=0;i<N;i++) for (int j=0;j<M;j++) {
     if (i==0 && j==0) B[i][j]=(A[0][1]+A[1][0]+A[1][1])/3;
    else if (i==N-1 && j==0) B[i][j]=(A[N-1][0]+A[N-1][1]+A[N][1])/3;
   else  if (i==0 && j==M-1) B[i][j]=(A[0][M-1]+A[1][M-1]+A[1][M])/3;
   else  if (i==N-1 && j==M-1) B[i][j]=(A[N-2][M-2]+A[N-2][M-1]+A[N-1][M-2])/3;
   else  if (i==0 && j>0 && j<M-1) B[i][j]=(A[0][j-1]+A[0][j+1]+A[1][j-1] + A[1][j] + A[1][j+1])/5;
   else  if (i==N-1 && j>0 && j<M-1) B[i][j]=(A[N-1][j-1]+A[N-1][j+1]+A[N-2][j-1] + A[N-2][j] + A[N-2][j+1])/5;
   else  if (i>0 && i<N-1 && j==0) B[i][j]=(A[i-1][0]+A[i+1][0]+A[i-1][1] + A[i][1] + A[j+1][1])/5;
   else  if (i>0 && i<N-1 && j==M-1) B[i][j]=(A[i-1][M-1]+A[i+1][M-1]+A[i-1][M-2] + A[i][M-2] + A[i+1][M-2])/5;
   else B[i][j] = (A[i-1][j-1] + A[i-1][j] + A[i-1][j+1] +A[i][j-1] + A[i][j+1] + A[i+1][j-1] + A[i+1][j] + A[i+1][j+1])/8;
 }
 for (int i=0;i<N;i++) {for (int j=0;j<M;j++) cout « B[i][j] « " "; cout « endl;}
}

655dded0d8d6a010906446.jpeg
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
int sum = 0;
int cnt = 0;
for (int dx = -1; dx <= 1; ++dx) {
  for (int dy = -1; dy <= 1; ++dy) {
    if (dx == 0 && dy == 0) continue;
    int nx = i + dx;
    int ny = j + dy;
    if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
    sum += A[nx][ny];
    ++cnt;
  }
}
B[i][j] = cnt == 0 ? 0 : sum / cnt;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы