Дан массив целочисленных матриц. Вывести матрицы, имеющие наибольшее число нулевых строк

1 минут

Дан массив целочисленных матриц. Вывести матрицы, имеющие наибольшее число нулевых строк.

Решение на C:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int a_count;
    printf("Количество матриц: ");
    scanf("%d", &a_count);

    int m_count;
    printf("Размер матриц: ");
    scanf("%d", &m_count);

    // выделим память для массивов
    int *zeros = malloc(a_count * sizeof(int)),
        **array = malloc(a_count * sizeof(int));

    memset(zeros, 0, a_count * sizeof(int));
    // выделим память для каждого элемента массива
    int i;
    for (i = 0; i < a_count; i++) {
        array[i] = malloc(m_count * sizeof(int));
    }

    int j, zer_max = 0;
    for (i = 0; i < a_count; i++) {
        printf("Введите элементы %d матрицы: ", i+1);

        for (j = 0; j < m_count; j++) {
            scanf("%d", &array[i][j]);

            if (array[i][j] == 0) {
                zeros[i]++;
            }
        }

        if (zeros[i] > zer_max) {
            zer_max = zeros[i];
        }
    }

    if (zer_max == 0) {
        printf("Нет ни одной матрицы с нулём");
        return 0;
    }

    printf("Матрицы с максимальным количеством нулей:\n");
    for (i = 0; i < a_count; i++) {
        if (zeros[i] == zer_max) {
            for (j = 0; j < m_count; j++) {
                printf("%d ", array[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

Решение на Pascal:

var
    i, j, zer_max, a_count, m_count: integer;
    zeros: array of integer;
    arr: array of array of integer;

begin
    write('Количество матриц: ');
    readln(a_count);

    setLength(zeros, a_count);

    write('Размер матриц: ');
    readln(m_count);

    setLength(arr, a_count, m_count);

    zer_max := 0;
    for i := 0 to a_count do
        zeros[i] := 0;

    for i := 0 to a_count-1 do begin
        write('Введите элементы ', i+1, ' матрицы: ');

        for j := 0 to m_count-1 do begin
            readln(arr[i][j]);

            if (arr[i][j] = 0) then
                zeros[i] := zeros[i] + 1;

        end;

        if (zeros[i] > zer_max) then
            zer_max := zeros[i];

    end;

    if (zer_max = 0) then begin
        writeln('Нет ни одной матрицы с нулём');
        exit;
    end;

    writeln('Матрицы с максимальным количеством нулей:');
    for i := 0 to a_count-1 do begin
        if (zeros[i] = zer_max) then begin
            for j := 0 to m_count-1 do
                write(arr[i][j], ' ');

            writeln('');
        end;
    end;

end.

Решение на Rust:

use std::io;

fn main() {
    println!("Количество матриц: ");
    let a_count = read_input_value();

    println!("Размер матриц: ");
    let m_count = read_input_value();

    let mut array = vec![vec![0; m_count]; a_count];
    let mut zeros = vec![0; a_count];

    let mut zer_max: u32 = 0;

    for i in 0..a_count {
        println!("Введите элементы {} матрицы", i + 1);

        for j in 0..m_count {
            let value = read_input_value();

            array[i][j] = value;

            if value == 0 {
                zeros[i] += 1;
            }
        }

        if zeros[i] > zer_max {
            zer_max = zeros[i];
        }
    }

    if zer_max == 0 {
        println!("Нет ни одной матрицы с нулём");
        return;
    }

    println!("Матрицы с максимальным количеством нулей:");

    for i in 0..a_count {
        if zeros[i] == zer_max {
            println!("{:?}", array[i]);
        }
    }
}

fn read_input_value() -> usize {
    let mut input = String::new();

    io::stdin().read_line(&mut input).expect("Ошибка ввода");

    input
        .trim()
        .parse()
        .expect("Введите целое положительное число")
}