Вывести столбец матрицы, в котором больше отрицательных элементов - C (СИ)
Формулировка задачи:
Задача: Дана целочисленная квадратная матрица размерности m*n.Найти наименьшее из значений элементов столбца, который обладет наибольшей суммой модулей элементов. Если таких столцов несколько, взять тот из них, в котором больше отрицательных элементов.
Здраствуйте! Я написал код, который находит наименьшее значение в столбце, который имеет макс сумму, но я не знаю как написать, чтобы при совпадении макс суммы выводило тот, где больше отрицательных. Помогите пожалуйста доделать программу.
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); int N = rand()%9+1, M=N; int i, j, a[M][N]; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { a[i][j] = rand() % 10-5; printf("%5d", a[i][j]); } printf("\n"); } int max_s=0, max_j = max_s; for(j=0;j<N;j++) { int i=0, sum=0; while(i<N) { sum+=abs(a[i++][j]); } if (sum > max_s) { max_s = sum; max_j = j; } } int min = 0; for (int t = 0; t<M; t++) min=(a[t][max_j] < a[min][max_j]) ? t : min; printf("Наибольшая сумма модулей элементов в столбце %d и равна %d\n", 1+max_j, max_s); printf("Наименьшее из значений: a[%d][%d] = %d\n", min+1,max_j+1,a[min][max_j]); }
Решение задачи: «Вывести столбец матрицы, в котором больше отрицательных элементов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define M 7 #define N 9 int main() { system("chcp 1251 > nul"); srand(time(NULL)); int i, j, a[M][N], max_s = 0, max_j, sum, max_neg = 0, count_neg, min; for (i = 0; i < M; i++, putchar('\n')) for (j = 0; j < N; j++) printf("%3d", a[i][j] = rand() % 10-5); for(j = 0; j < N; j++){ for(i = 0, sum = 0, count_neg = 0; i < M; i++){ sum += abs(a[i][j]); if(a[i][j] < 0) count_neg++; } if (sum > max_s){ max_s = sum; max_j = j; if(count_neg > max_neg) max_neg = count_neg; } if(sum == max_s && count_neg > max_neg){ max_j = j; max_neg = count_neg; } } min = a[0][max_j]; for (i = 1; i < M; i++) if(a[i][max_j] < min){ min = a[i][max_j]; j = i; } printf("Наибольшая сумма модулей элементов в столбце %d и равна %d\n", max_j, max_s); printf("Наименьшее из значений: a[%d][%d] = %d\n", j, max_j, min); }
Объяснение кода листинга программы
В этом коде создается матрица случайных чисел, затем находится столбец с наибольшим количеством отрицательных чисел, и выводится наибольшая сумма модулей элементов в этом столбце и наименьшее из значений в этом столбце.
- Объявлены переменные:
M
иN
- размеры матрицы;a
- матрица;max_s
- максимальная сумма модулей элементов в столбце;max_j
- номер столбца с максимальной суммой модулей элементов;sum
- сумма элементов в текущем столбце;count_neg
- количество отрицательных элементов в текущем столбце;max_neg
- максимальное количество отрицательных элементов в столбце;min
- наименьшее значение в текущем столбце;i
иj
- индексы для обхода матрицы.
- Заполнение матрицы случайными числами от -5 до 5.
- Обход матрицы для определения столбца с наибольшим количеством отрицательных чисел:
- Внешний цикл
for
для обхода столбцов; - Внутренний цикл
for
для обхода строк в текущем столбце; - Суммирование модулей элементов в текущем столбце;
- Подсчет количества отрицательных элементов в текущем столбце;
- Если текущий столбец имеет максимальную сумму модулей элементов, то обновление значений
max_s
,max_j
,max_neg
; - Если текущий столбец имеет ту же сумму модулей элементов, что и предыдущий, но имеет большее количество отрицательных элементов, то обновление значений
max_s
,max_j
,max_neg
.
- Внешний цикл
- Обход строк в найденном столбце для определения наименьшего значения.
- Вывод результатов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д