Некорректное заполнение массива - 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] увеличивается на единицу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д