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