Это мой первый пост здесь.
Задание моего онлайн-курса на C попросило меня удалить каждую строку в вещественной (не динамически размещаемых, указатели не используются), у которых средняя сумма больше, чем средняя сумма всей матрицы. Строки должны быть «удалены», сдвинув те, что ниже, на одну позицию вверх.
Я настроил матрицу со следующим кодом:
int matrix[100][100]
Теперь моя идея состояла в том, чтобы создать обычный одномерный массив, который хранит индексы строк, которые будут удалены .
Вот как я это сделал:
k = 0;
for (i = 0; i < no_of_rows; i++) {
average_sum_of_row = 0;
for (j = 0; j < no_of_columns; j++) {
average_sum_of_row += matrix[i][j];
}
average_sum_of_row = average_sum_of_row / no_of_columns;
if (average_sum_of_row > average_sum_of_matrix) {
indexes_of_rows_to_remove[k] = i;
k++;
l++;
}
}
Который работает просто отлично! Я получаю массив, элементы которого являются индексами строк, которые должны быть удалены. Тем не менее, при реализации моего кода в следующем:
m = 0;
for (i = 0; i < V; i++) {
if (indexes_of_rows_to_remove[m] == i) {
for (k = i; k < no_of_rows - 1; k++) {
for (j = 0; j < no_of_columns; j++) {
matrix[k][j] = matrix[k + 1][j];
}
}
i--;
no_of_rows--;
}
m++;
}
Это не работает. То, что я использовал, это мой существующий код удаления строки, сдвигая те, которые находятся ниже, и уменьшая количество строк на одну, но это просто не работает, и я не знаю почему.
Я пытался использовать отдельное целое число (m), чтобы просмотреть все элементы массива индексов, но по какой-то причине он не работает.
Спасибо всем!