Как доработать код c#, чтобы выполнялась задача ( двумерные массивы )?

Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные столбцы матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих столбцах. Найти количество столбцов, похожих на последний столбец данной матрицы.

в main в циклах for нужно, чтобы нашло похожие значение чисел как в последнем столбце в других столбцах, но у меня программа считает положения и работает оно неправильно, помогите


static void Main(string[] args)
        {
            Console.WriteLine("введите количество строк");
            int m = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("введите количество столбцов");
            int n = Convert.ToInt32(Console.ReadLine());
            int[,] mas = new int[m, n];
            Fill(ref mas);
            Print(mas);

            int count = 0;
            for (int i = 1; i < n; i++)
            {
                for (int t = 0; t < m; t++)
                {
                    if (mas[t,mas.GetLength(1) - 1] == mas[t, i])
                    {
                        count++;
                        break;
                    }
                }
            }

            Console.WriteLine("Количество столбцов, похожих на последний столбец матрицы = " + count);
            Console.ReadKey();
        }

        public static void Print(int[,] mas)
        {
            for (int i = 0; i < mas.GetLength(0); i++)
            {
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    Console.Write($"|{mas[i, j],3}");
                }
                Console.WriteLine();
            }

        }

        public static void Fill(ref int[,] mas)
        {
            Random rnd = new Random();
            for (int i = 0; i < mas.GetLength(0); i++)
            {
                for (int j = 0; j < mas.GetLength(1); j++)
                {
                    mas[i, j] = rnd.Next(0, 100); ;
                }
            }
        }

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

Автор решения: MBo

Вам же нужно множество, т.е. набор чисел, поэтому позиции значения не имеют.

Во-первых, вы можете создать HashSet, положив в него элементы последнего столбца, а потом для другого столбца проверять, что каждый его элемент есть в HashSet (Contains)

Если в учебном задании пока не разрешается использовать подобные классы - вы можете просто сделать массив длиной 101, заполненный сначала нулями, и установить для каждого элемента последнего столбца соответствующую ячейку массива в единицу (A[mas[i,n-1]] = 1]), и далее сверять другие столбцы с ячейками массива.

→ Ссылка
Автор решения: MarkShcerbakov

Вот решение. Суть в том, чтобы сравнивать между собой два упорядоченных одномерных массива через SequenceEqual.

using System;
static int LastColCounter(int m, int n)
{
    int[,] arr = new int[m, n]; // Массив со случайными числами
    int[] lastCol = new int[m]; // Массив с крайним столбцом
    int[] tmpArr = new int[m];  // Массив с очередным столбцом
    int count = 0;              // Счетчик похожих столбцов

    // Заполняем массив arr случайными числами
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            arr[i, j] = new Random().Next(0, 101);

            // Заполняем массив lastCol элементами крайнего столбца
            if (j == n - 1) lastCol[i] = arr[i, j];
        }
    }

    // Сортируем массив по возрастанию
    Array.Sort(lastCol); 

    // Сравниваем каждый столбец с крайним
    for (int j = 0; j < n - 1; j++)
    {
        for (int i = 0; i < m; i++)
        {
            tmpArr[i] = arr[i, j];
        }

        // Сортируем каждый столбец по возрастанию
        Array.Sort(tmpArr); 
        
        // Если очередной и крайний столбцы эквивалентны, 
        // то увеличиваем счетчик
        if (tmpArr.SequenceEqual(lastCol)) count++;
    }

    return count;
}
→ Ссылка