Некорректное заполнение массива - C (СИ)
Формулировка задачи:
Околосапёр.
Не могу понять, почему не работает.
Девятка - бомба.
Почему-то не хочет окружать её единичками, пропускает предыдущую строку, ПРЕДЫДУЩЕГО столбца и прибавляет лишнюю единицу к предыдущей строке СЛЕДУЮЩЕГО столбца.
void DoSmth (int A[100][100], int m, int n) { for (int i=0;i<m;i++) for (int j=0;j<n;j++) if(A[i][j]==9) { if (A[i-1][j-1]<9) A[i-1][j-1]++; //предыдущая строка, предыдущий столбец if (A[i+1][j]<9) A[i+1][j]++; //следующая строка, текущий столбец if (A[i-1][j]<9) A[i-1][j]++; //предыдущая строка, текущий столбец if (A[i+1][j+1]<9) A[i+1][j+1]++; //следующая строка, следующий столбец if (A[i-1][j+1]<9) A[i-1][j+1]++; //предыдущая строка, следующий столбец if (A[i+1][j-1]<9) A[i+1][j-1]++; //следующая строка, предыдущий столбец //if (A[i-1][j-1]<9) A[i-1][j-1]++; //предыдущая строка, предыдущий столбец if (A[i][j+1]<9) A[i][j+1]++; //текущая строка, следующий столбец if (A[i][j-1]<9) A[i][j-1]++; //текущая строка, предыдущий столбец } }
Решение задачи: «Некорректное заполнение массива»
textual
Листинг программы
if(A[i][j]==9) { int di[]={-1,-1,-1,0,1,1, 1, 0}; int dj[]={-1, 0, 1,1,1,0,-1,-1}; for(int k=0; k<8; k++) { int ni=i+di[k]; int nj=j+dj[k]; if(ni>=0 && nj>=0 && ni<m && nj<n && A[ni][nj]<9) A[ni][nj]++; } }
Объяснение кода листинга программы
В данном коде выполняется проверка, является ли элемент массива A[i][j] равным 9. Если это так, то создается новый массив di и dj, который содержит значения для смещения элемента. Затем происходит цикл по элементам массива di и dj, в котором создаются новые значения i и j, которые используются для проверки диагоналей. Если элементы находятся в пределах допустимых значений (ni>=0 && nj>=0 && ni<m && nj<n), то значение элемента A[ni][nj] увеличивается на единицу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д