Составьте программу подсчета различных элементов двумерного массива A(N,M).

0 голосов
96 просмотров

Составьте программу подсчета различных элементов двумерного массива A(N,M).


Информатика (60 баллов) | 96 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

// PascalABC.NET 3.1, сборка 1218 от 12.04.2016
begin
  var n:=ReadInteger('N=');
  var m:=ReadInteger('M=');
  var a:array of array of integer;
  SetLength(a,N);
  for var i:=0 to n-1 do begin
    a[i]:=ArrRandom(m,10,99);
    a[i].Println
    end;
  Println('Различных элементов',a.SelectMany(x->x).ToHashSet.Count)
end.

Тестовое решение:
N= 5
M= 8
92 37 63 60 17 38 79 64
13 52 90 29 90 84 41 39
59 94 48 89 79 25 30 75
14 51 14 30 33 78 42 45
59 84 76 57 43 78 71 90
Различных элементов 32

(142k баллов)
0

Объяснение. Метод SelectMany "разворачивает" двумерный массив А в последовательность элементов. Эта последовательность помещается в стандартный для .NET набор HashSet, который строится на базе хэш-таблицы, т.е. не допускает одинаковых значений. А далее метод Count возвращает количество элементов в этом наборе.

0

Можно, конечно, попытаться реализовать решение допотопными "школьными" методами, но это трудозатратно и не может быть оценено в 5 баллов.

0 голосов

В C++
#include
#include
#include
int main()
{
    using namespace std;

    const int N = 5;
    const int M = 6;

    int A[N][M];

    //Как-нибудь заполняем массив
    srand(time(0));
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < M; ++j)
            A[i][j] = rand() % (N * M) + 1;
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < M; ++j)
            cout << setw(4) << A[i][j];<br>        cout << endl;<br>    }

   
    //Подсчитываем сумму всех элементов массива
    int sum = 0;

    for (int i = 0; i < N; ++i)
        for (int j = 0; j < M; ++j)
            sum += A[i][j];

    //Вычитаем из полученной суммы повторяющиеся элементы
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < M; ++j)
        {
            bool flag = false;
            for (int i1 = 0; i1 < N; ++i1)
            {
                for (int j1 = 0; j1 < M; ++j1)
                    if (!(i == i1 && j == j1))
                        if (A[i][j] == A[i1][j1])
                        {
                            sum -= A[i][j];
                            flag = true;
                            break;
                        }
                if (flag)
                    break;
            }
        }

    cout << "Sum of different: " << sum << endl;<br>
    return 0;
}

(1.1k баллов)
0

d gfcrfkt ye;yj

0

в паскале можно пожалуйста

0

Это неверное решение. Нужно КОЛИЧЕСТВО а не СУММА

0

И мне в паскале нужно