Вывести столбец матрицы, в котором больше отрицательных элементов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача: Дана целочисленная квадратная матрица размерности m*n.Найти наименьшее из значений элементов столбца, который обладет наибольшей суммой модулей элементов. Если таких столцов несколько, взять тот из них, в котором больше отрицательных элементов.

Здраствуйте! Я написал код, который находит наименьшее значение в столбце, который имеет макс сумму, но я не знаю как написать, чтобы при совпадении макс суммы выводило тот, где больше отрицательных. Помогите пожалуйста доделать программу.

Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {
  6. srand(time(NULL));
  7. int N = rand()%9+1, M=N;
  8. int i, j, a[M][N];
  9. for (i = 0; i < M; i++)
  10. {
  11. for (j = 0; j < N; j++)
  12. {
  13. a[i][j] = rand() % 10-5;
  14. printf("%5d", a[i][j]);
  15. }
  16. printf("\n");
  17. }
  18. int max_s=0, max_j = max_s;
  19. for(j=0;j<N;j++)
  20. {
  21. int i=0, sum=0;
  22. while(i<N)
  23. {
  24. sum+=abs(a[i++][j]);
  25. }
  26. if (sum > max_s)
  27. {
  28. max_s = sum; max_j = j;
  29. }
  30. }
  31. int min = 0;
  32. for (int t = 0; t<M; t++)
  33. min=(a[t][max_j] < a[min][max_j]) ? t : min;
  34. printf("Наибольшая сумма модулей элементов в столбце %d и равна %d\n", 1+max_j, max_s);
  35. printf("Наименьшее из значений: a[%d][%d] = %d\n", min+1,max_j+1,a[min][max_j]);
  36. }

Решение задачи: «Вывести столбец матрицы, в котором больше отрицательных элементов»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define M 7
  5. #define N 9
  6. int main()
  7. {
  8.     system("chcp 1251 > nul");
  9.     srand(time(NULL));
  10.     int i, j, a[M][N], max_s = 0, max_j, sum, max_neg = 0, count_neg, min;
  11.     for (i = 0; i < M; i++, putchar('\n'))
  12.         for (j = 0; j < N; j++)
  13.             printf("%3d", a[i][j] = rand() % 10-5);
  14.     for(j = 0; j < N; j++){
  15.         for(i = 0, sum = 0, count_neg = 0; i < M; i++){
  16.             sum += abs(a[i][j]);
  17.             if(a[i][j] < 0)
  18.                 count_neg++;
  19.         }
  20.         if (sum > max_s){
  21.             max_s = sum;
  22.             max_j = j;
  23.             if(count_neg > max_neg)
  24.             max_neg = count_neg;
  25.         }
  26.         if(sum == max_s && count_neg > max_neg){
  27.             max_j = j;
  28.             max_neg = count_neg;
  29.         }
  30.     }
  31.     min = a[0][max_j];
  32.     for (i = 1; i < M; i++)
  33.         if(a[i][max_j] < min){
  34.             min = a[i][max_j];
  35.             j = i;
  36.         }
  37.     printf("Наибольшая сумма модулей элементов в столбце %d и равна %d\n", max_j, max_s);
  38.     printf("Наименьшее из значений: a[%d][%d] = %d\n", j, max_j, min);
  39. }

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы