Вывести столбец матрицы, в котором больше отрицательных элементов - 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);
}

Объяснение кода листинга программы

В этом коде создается матрица случайных чисел, затем находится столбец с наибольшим количеством отрицательных чисел, и выводится наибольшая сумма модулей элементов в этом столбце и наименьшее из значений в этом столбце.

  1. Объявлены переменные:
    • M и N - размеры матрицы;
    • a - матрица;
    • max_s - максимальная сумма модулей элементов в столбце;
    • max_j - номер столбца с максимальной суммой модулей элементов;
    • sum - сумма элементов в текущем столбце;
    • count_neg - количество отрицательных элементов в текущем столбце;
    • max_neg - максимальное количество отрицательных элементов в столбце;
    • min - наименьшее значение в текущем столбце;
    • i и j - индексы для обхода матрицы.
  2. Заполнение матрицы случайными числами от -5 до 5.
  3. Обход матрицы для определения столбца с наибольшим количеством отрицательных чисел:
    • Внешний цикл for для обхода столбцов;
    • Внутренний цикл for для обхода строк в текущем столбце;
    • Суммирование модулей элементов в текущем столбце;
    • Подсчет количества отрицательных элементов в текущем столбце;
    • Если текущий столбец имеет максимальную сумму модулей элементов, то обновление значений max_s, max_j, max_neg;
    • Если текущий столбец имеет ту же сумму модулей элементов, что и предыдущий, но имеет большее количество отрицательных элементов, то обновление значений max_s, max_j, max_neg.
  4. Обход строк в найденном столбце для определения наименьшего значения.
  5. Вывод результатов.

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы