Определить строки матрицы, в которых число 5 встречается 3 и более раз

Задача

Матрицу 10x20 заполнить случайными числами от 0 до 15. Вывести на экран саму матрицу и номера строк, в которых число 5 встречается три и более раз.

Пояснение к задаче и алгоритм решения

Для хранения номеров строк, в которых число 5 встречается более двух раз, предусмотрим одномерный массив размерностью, равной количеству строк матрицы.

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

Вывод матрицы можно осуществлять в том же цикле, что и ее заполнение. Вывод же номеров строк следует выполнить в отдельном цикле по одномерному массиву до того индекса, на котором остановилось его заполнение.

Исходный код на языке программирования Pascal

const
    M = 20; N = 10;
var
    a: array[1..N,1..M] of integer;
    row: array[1..N] of byte;
    i,j,k,qty: byte;
 
begin
    randomize;
    k := 0;
    for i:=1 to N do begin
        qty := 0;
        for j:=1 to M do begin
            a[i,j] := random(15);
            write(a[i,j]:4);
            if a[i,j] = 5 then qty := qty + 1;
        end;
        if qty >= 3 then begin
            k := k + 1;
            row[k] := i;
        end;
        writeln;
    end;
 
    write('Строки, в которых 3 и больше пятерок: ');
    for i:=1 to k do
        write(row[i],' ');
    writeln;
end.

Особенности решения на языке программирования Pascal

Пример(ы) выполнения программы на языке Pascal:

   5  13   0  14  12  11   8  11   8  11  12   7  12   8   6   8   1   2  12   1
   5  11   3   6  11   9   4  10   9   6   9   3   0   8   5   9  12  13   1  10
   3   7   7   7   7   0   9  10   7   7  11  11   2   3   3  12  10   0   3   1
  10  11   9   1   8   9   1   0  12   6   0   5   6  11   2  13  12   7   2  10
  11  13   4   2   2   3   4  10  10   9   6   3   8  13   1   8   4   7  10   7
   6   0  12   5   5  10   6   1  11   3  11   5   3   3   5   3   3  10  11  10
   6   1   7   1  10  14   5   7   5   6  12  10   4   0  11   0   3  13   6   8
   6   2   2   9  14  12   2   2   4  10   3   6  11   2   3  10  13  12   4   9
   9   8   7   0   0   6  14   4   5   7   5  11   5   3  13  13  14  10  13   3
   6   0   2   1   9   4  13   2   5  11   7   5   4   4   3   4  13   5   0   5
Строки, в которых 3 и больше пятерок: 6 9 10

Исходный код на языке программирования C

#include <stdio.h>
#define M 20
#define N 10
main() {
    int a[N][M], row[N], i, j, k, qty;
    srand(time(NULL));
    k = 0;
    for (i=0; i<N; i++) {
        qty = 0;
        for (j=0; j<M; j++) {
            a[i][j] = rand()%15;
            printf("%4d", a[i][j]);
            if (a[i][j] == 5) qty += 1;
        }
        if (qty >= 3) {
            row[k] = i+1;
            k += 1;
        }
        printf("\n");
    }
 
    printf("Строки, в которых три и более чисел 5: ");
    for (i=0; i<k; i++) {
        printf("%d ", row[i]);
    }
    printf("\n");
}

Исходный код на языке программирования Python

from random import random
N = 10
M = 20
a = []
row = []
for i in range(N):
    z = []
    qty = 0
    for j in range(M):
        n = int(random() * 15)
        z.append(n)
        print("%3d" % n, end='')
        if n == 5: qty += 1
    print()
    if qty >= 3: row.append(i+1)
    a.append(z)
print("Строки, в которых три и более чисел 5:", row)

Исходный код на языке программирования КуМир

алг
нач
  цел N=10, M=20
  цел таб a[1:N,1:M], row[1:N]
  цел i, j, k, qty
  k := 0
  нц для i от 1 до N
    qty := 0
    нц для j от 1 до M
      a[i,j] := int(rand(0,15))
      вывод a[i,j], " "
      если a[i,j] = 5 то qty := qty + 1 все
    кц
    если qty >= 3 то
      k := k + 1
      row[k] := i
    все
    вывод нс
  кц
 
  вывод "Строки, в которых три и более чисел 5: "
  нц для i от 1 до k
    вывод row[i], " "
  кц
кон

Исходный код на языке программирования Basic

M = 20
N = 10
dim a(N,M)
dim row(N)
k = 0
for i=0 to N-1
        qty = 0
        for j=0 to M-1
                a[i,j] = int(rand*15)
                print a[i,j] + " ";
                if a[i,j]=5 then qty=qty+1
        next j
        if qty >= 3 then
                row[k] = i+1
                k = k+1
        endif
        print
next i
print "Строки, в которых 5 встречается 3 и более раз: ";
if k<>0 then
        for i=0 to k-1
                print row[i] + "  ";
        next i
endif

Пример(ы) выполнения программы на языке Basic

14 14 13 4 3 3 14 14 5 0 14 3 9 3 7 7 2 1 9 12
2 5 10 0 13 10 1 6 4 9 0 4 8 2 12 1 2 2 11 13
4 8 7 3 8 10 14 11 6 11 0 4 4 14 10 11 7 7 3 12
7 6 6 14 2 2 8 4 14 13 3 11 14 10 14 0 14 14 9 4
10 14 14 2 8 10 10 7 10 12 10 2 4 0 2 10 12 2 13 11
5 4 13 11 0 4 7 4 10 9 10 10 14 5 1 5 9 8 7 2
14 3 14 2 13 7 2 2 0 0 11 9 0 14 7 1 8 12 11 2
12 4 12 2 0 14 9 2 10 3 3 10 8 4 8 0 2 6 11 11
13 8 4 2 12 3 9 13 6 8 10 5 13 12 7 6 5 12 10 9
5 9 11 2 11 2 4 5 6 12 13 4 2 13 2 6 6 7 9 5
Строки, в которых 5 встречается 3 и более раз: 6  10

Особенности решения на языке программирования Basic

Цикл, выводящий номера строк, "обрамлен" в конструкцию if, т.к. если строк нет, то k остается равно нулю и в происходит ошибка в цикле for из-за того, что начальное значение оказывается больше конечного.

Тема

Матрицы

Уровень сложности

Средний

Дата публикации