Необходимо удалить из двумерной матрицы строку с минимальной суммой элементов
Я думаю, что удалить строку можно, сделав цикл на нахождение индекса строки с минимальной суммой и присвоив этот индекс какой-нибудь переменной, а затем сделать сдвиг всех строк с перевыделением памяти, но у меня не получается это грамотно написать. Если кто-то может подать идею или дополнить ниже представленный код - буду предельно благодарен.
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <malloc.h>
// печать массива
void printMt(int* A, int n, int m) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
printf("%d\t", *(A + m * i + j));
//printf("%d\t", ar[m*i + j]);
}
printf("\n");
}
}
// ввод элементов матрицы
void inputMt(int* A, int n, int m,int s) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
scanf_s("%d", A + m * i + j);
}
}
}
int main()
{
int i, j, n, m, smin = 0, s=0, imin;
setlocale(LC_ALL, "ru");
printf("\nКол-во строк: ");
scanf_s("%d", &n);
printf("\nКол-во столбцов: ");
scanf_s("%d", &m);
int* A = (int*)malloc(n * m * sizeof(int));
printf("\n\n Введите элементы массива: \n\n");
inputMt(A, n, m, s);
printf("\n\n Исходный массив: \n\n");
printMt(A, n, m);
Ответы (1 шт):
Автор решения: Arty
→ Ссылка
Я дополнил ваш код так, чтобы он в итоге решал поставленную задачу:
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <locale.h>
#include <malloc.h>
// печать массива
void printMt(int* A, int n, int m) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
printf("%d\t", *(A + m * i + j));
//printf("%d\t", ar[m*i + j]);
}
printf("\n");
}
}
// ввод элементов матрицы
void inputMt(int* A, int n, int m,int s) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
scanf("%d", A + m * i + j);
}
}
}
int main()
{
int i, j, n, m, smin = 0, s=0, imin=-1;
setlocale(LC_ALL, "ru");
printf("\nКол-во строк: ");
scanf("%d", &n);
printf("\nКол-во столбцов: ");
scanf("%d", &m);
int* A = (int*)malloc(n * m * sizeof(int));
printf("\n\n Введите элементы массива: \n\n");
inputMt(A, n, m, s);
printf("\n\n Исходный массив: \n\n");
printMt(A, n, m);
for (int i = 0; i < n; ++i) {
s = 0;
for (int j = 0; j < m; ++j)
s += *(A + i * m + j);
if (imin < 0 || s < smin) {
smin = s;
imin = i;
}
}
if (imin >= 0) {
for (int i = imin; i < n - 1; ++i) {
for (int j = 0; j < m; ++j)
*(A + i * m + j) = *(A + (i + 1) * m + j);
}
n = n - 1;
}
printf("\n\n Модифицированный массив: \n\n");
printMt(A, n, m);
return 0;
}
Вход:
Кол-во строк: 3
Кол-во столбцов: 3
Введите элементы массива:
4 5 6
1 2 3
7 8 9
Выход:
Исходный массив:
4 5 6
1 2 3
7 8 9
Модифицированный массив:
4 5 6
7 8 9