Определить минимальный элемент двумерного массива MxN, заполненного случайными числами от -5 до 5

Определить минимальный элемент двумерного массива MxN, заполненного случайными числами от -5 до 5. Напечатать номер строки, содержащей максимальное количество минимальных элементов, если таковые есть.

Вот то что пока есть, но из-за поиска количества элементов почему-то ломается поиск минимального

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>

//Определить минимальный элемент двумерного массива MxN, заполненного случайными 
//числами от -5 до 5. Напечатать номер строки, содержащей максимальное 
//количество минимальных элементов, если таковые есть.

main() {
    setlocale(LC_ALL,"");

    int i, j, n, m, rand(), min, kolmin=0, row, max= 0;
    printf("Введите размер массива, разделенный пробелом (строки и столбцы): ");
    scanf("%d%d",&n,&m);
    
    int mxn[n][m];  

    srand(time(NULL));

//заполнение массива
  for(i = 0; i < n; i++)   //строки массива
    for(j = 0; j < m; j++)   //столбцы массива
      mxn[i][j] = -5 + rand() % 10;  

//вывод массива на экран
    for (i = 0; i < n; i++) 
    {
        for (j = 0; j < m; j++) 
        {
            printf("%d\t", mxn[i][j]);
        }
        printf("\n");
    }
    
//поиск минимального элемента

    for (i = 0; i < n; i++) 
    {
        min=0;
        for (j = 0; j < m; j++) 
        {
            if (mxn[i][j] < min)
        {
            min = mxn[i][j];
        }   
        }
    }

//поиск строки, содержащей максимальное колдичество минимальных элементов
    for (i = 0; i < n; i++) 
    {
        kolmin=0;
        row = 0;
        for (j = 0; j < m; j++) 
        {
            if (mxn[i][j] == min)
            {
                kolmin++;
                if (kolmin > max)
                {
                max = kolmin;
                row = i;
                }

                
            }   
            else 
            {
                kolmin = 1;
            }
        }
    }
    
    
    printf("\nМинимальный элемент массива: %d", min);
    printf("\nНомер строки содержащей максимальное количество минимальных элементов: %d", row); 
    printf("\nКоличество: %d", kolmin);

    getchar();
    return 0;
}

Ответы (2 шт):

Автор решения: n1tr0xs
  1. Исходно минимум нужно брать >5, т.е. хотя бы 6.
  2. Вы для каждой строки этот минимум ищете заново.
    Совсем по-простому это делается так:
#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>

//Определить минимальный элемент двумерного массива MxN, заполненного случайными 
//числами от -5 до 5. Напечатать номер строки, содержащей максимальное 
//количество минимальных элементов, если таковые есть.

int main() {
    setlocale(LC_ALL,"");
    
    int i, j, n, m, rand(), min=6, maxMinRow=-1, maxMinCount=0, minCount=0;
    printf("Введите размер массива, разделенный пробелом (строки и столбцы): ");
    scanf("%d%d", &n, &m);
    
    int mxn[n][m];  
    
    srand(time(NULL));
    
    //заполнение массива
    for(i=0; i<n; ++i) {
        for(j=0; j<m; ++j) {
            mxn[i][j] = -5 + rand() % 10;  
        }
    }
    // вывод массива
    for(i=0; i<n; ++i){
        for(j=0; j<m; ++j) {
            printf("%d\t", mxn[i][j]);
        }
        printf("\n");
    }
    // поиск минимального
    for(i=0; i<n; ++i) {
        for(j=0; j<m; ++j) {
            if(mxn[i][j]<min) {
                min = mxn[i][j];
            }
        }
    }
    // поиск строки с максимальным числом минимальных элементов
    for(i=0; i<n; ++i){
        int count = 0; // количество минимальных на текущей строке
        for(j=0; j<m; ++j) {
            if(mxn[i][j]==min) {
                ++count;
            }
        }
        if(count>maxMinCount){
            maxMinCount=count;
            maxMinRow = i;
        }
    }
    // подсчет количества минимальных элементов
    for(i=0; i<n; ++i) {
        for(j=0; j<m; ++j) {
            if(mxn[i][j]==min) {
                ++minCount;
            }
        }
    }
    printf("\nМинимальный элемент массива: %d", min);
    printf("\nНомер строки содержащей максимальное количество минимальных элементов: %d", maxMinRow); 
    printf("\nКоличество: %d", minCount);
    getchar();
    return 0;
}
→ Ссылка
Автор решения: kawagiri
#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>

//Определить минимальный элемент двумерного массива MxN, заполненного случайными 
//числами от -5 до 5. Напечатать номер строки, содержащей максимальное 
//количество минимальных элементов, если таковые есть.

int main() {
    setlocale(LC_ALL,"");
    
    int i, j, n, m, rand(), min=6, maxMinRow=-1, maxMinCount=0;
    printf("Введите размер массива, разделенный пробелом (строки и столбцы): ");
    scanf("%d%d", &n, &m);
    
    int mxn[n][m];  
    
    srand(time(NULL));
    
    //заполнение массива
    for(i=0; i<n; ++i) {
        for(j=0; j<m; ++j) {
            mxn[i][j] = -5 + rand() % 10;  
        }
    }
    // вывод массива
    for(i=0; i<n; ++i){
        for(j=0; j<m; ++j) {
            printf("%d\t", mxn[i][j]);
        }
        printf("\n");
    }
    // поиск минимального
    for(i=0; i<n; ++i) {
        for(j=0; j<m; ++j) {
            if(mxn[i][j]<=min) {
                min = mxn[i][j];
            }
        }
    }
// поиск строки с максимальным числом минимальных элементов
    for(i=0; i<n; ++i){
        int count = 0; // количество минимальных на текущей строке
        for(j=0; j<m; ++j) {
            if(mxn[i][j]==min) {
                ++count;
            }
        }
        if(count>maxMinCount){
            maxMinCount=count;
            maxMinRow = i;
        }
    }

    printf("\nМинимальный элемент массива: %d", min);
    printf("\nНомер строки содержащей максимальное количество минимальных элементов: %d", maxMinRow); 
    printf("\nКоличество: %d", maxMinCount);
    getchar();
    return 0;
}
→ Ссылка