Как найти убывающий столбец в матрице
package main
import "fmt"
func main() {
array:=[4][4]int {{2,1,6,5}, {7,6,8,0},{4,6,3,1},{5,6,7,4}}
b:=0;
for i:=0;i<4;i++{
for j:=0;j<5;j++{
if array[i+1][j]<array[i][j] {
b=b+1
}
}
}
fmt.Println(b)
}
Ответы (1 шт):
array:=[4][4]int {{2,1,6,5}, {7,6,8,0},{4,6,3,1},{5,6,7,4}}
^^^^^^
b:=0;
for i:=0;i<4;i++{
^^^^^^^^
for j:=0;j<5;j++{
^^^^^^^^
if array[i+1][j]<array[i][j] {
^^^^^^^^
b=b+1
}
}
}
Размер массива 4x4, но индексация начинается с 0, а значит валидные индексы это 0, 1, 2, 3.
На последней итерации цикла по i у вас будет i = 3, а значит обращение к array[i+1][j] будет по индексу array[3+1][j], выход за пределы массива.
На последней итерации цикла по j у вас будет обращение к array[i+1][4] - снова выход за пределы массива.
Значит, оба цикла нужно заканчивать чуть раньше, чтобы не выходить за пределы массива.
Что касается сути задачи, то вы, например, можете считать кол-во убывающих элементов во внутреннем цикле, что вы сейчас и делаете. Только b нужно обнулять перед началом внутреннего цикла, а после внутреннего цикла нужно проверять, что b совпадает с числом итераций внутреннего цикла и в этом случае можно увеличивать счётчик убывающих столбцов, для чего вам нужно завести ещё одну отдельную переменную. Можно и по-другому это делать - завести перед внутренним циклом флаг и сбрасывать его, если условие убывания не выполняется хотя бы один раз. После цикла проверять это условие и менять или не менять счётчик уменьшающихся столбцов.