1

Тема: Проблема з визначенням максимального числа

Завдання
Дано цілочисельну прямокутну матрицю. Визначіть:

  1. Кількість рядків, що не містять  нульового елемента;

  2. Максимальне з чисел, що зустрічається у заданій матриці більше одного разу.

#include "pch.h"
#include <iostream>
#include <ctime>
#include <cmath>



int main()
{
    srand(time(NULL));
    setlocale(LC_CTYPE, "ukr");
    int a[6][6], i, j, rowc = 0, k = 0, N, M;
    
    printf("Введiть кількість рядків M: ");
    scanf_s("%d", &M);
    printf("Введіть кількість стовпців N: ");
    scanf_s("%d", &N);
    int r[6] = { 0 };// r – масив кількості нульових елементів рядків матриці
    int max = a[0][0];
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < N; j++)
        {
            a[i][j] = rand() % 11;
            if (a[i][j] == 0)
            {
                r[i]++;
            }
            
            if (a[i][j] > max)
                max = a[i][j];
        }
    }
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < N; j++)
        {
            printf("%i\t", a[i][j]);
        }
        printf("\n");
    }
    for (i = 0; i < M; i++)
    {
        if (r[i] == 0)    // r[i]=0  означає, що в і-му рядку немає нульових елементів
        {
            rowc++;
        }
    }
    int **b = (int **)calloc(M * N, sizeof(int));    // Виділення пам’яті для динамічної матриці b
    for (i = 0; i < rowc; i++)
    {
        b[i] = (int*)calloc(N, sizeof(int));
    }
    for (i = 0; i < M; i++)
    {
        if (r[i] == 0)        // Якщо в і-му рядку відємних елементів немає, відбувається
        {
            for (j = 0; j < N; j++)
            {
                b[k][j] = a[i][j];    //копіювання рядка у нову матрицю
            }
            k++;   // і збільшення індексу рядка нової матриці.
        }
    }
    
    printf("  %d - рядків які не містять нульових елементів \n", rowc);
    printf("  %d - максимальний елемент\n", max);
    printf("Матриця, в рядках якої немає нульових елементiв: \n");
    for (i = 0; i < rowc; i++)
    {
        for (j = 0; j < N; j++)
        {
            printf("%i\t", b[i][j]);
        }
        printf("\n");
    }
    

    for (int i = 0; i < rowc; i++)
        free(b[i]);        // Звільнення пам’яті від динамічної матриці
    free(b);
    system("pause>>void");
    return 0;
}

Не можу правильно виконати друге завдання, знайшов тільки максимальне число.

2

Re: Проблема з визначенням максимального числа

шо складного?

3

Re: Проблема з визначенням максимального числа

ur_naz написав:

шо складного?

Не докінця розумію, як це правильно оформити

4

Re: Проблема з визначенням максимального числа

Створіть допоміжний масив чисел, які вже зустрічалися в матриці, і перевіряйте всі числа в матриці: якщо числа ще немає в масиві - додаєте туди, якщо вже є - перевіряєте, чи це не максимум.
В принципі, можна і без додаткового масиву, але тоді буде додаткова перевірка по кожному числу, чи воно не зустрічалося в матриці, тому раджу саме додатковий масив.