Найти элементы, которые одновременно являются минимальными в своей строке и максимальными в своем столбце - C#
Формулировка задачи:
Дан массив размера n × m, все элементы которого различны.
Необходимо найти такие элементы, которые одновременно являются
минимальными в своей строке и максимальными в своем столбце.
Также нужно вывести индексы этих элементов. Если в массиве нет
таких элементов, нужно вывести 0.
Решение задачи: «Найти элементы, которые одновременно являются минимальными в своей строке и максимальными в своем столбце»
textual
Листинг программы
using System;
class Program
{
static int N = 2, M = 3;
static int[,] matrix;
static void Main(string[] args)
{
matrix = new int[N, M];
Fill();
Show();
Search();
Console.ReadKey();
}
static void Fill()
{
Random random = new Random();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
int tmp = 0;
bool ok = false;
while (!ok)
{
ok = true;
tmp = random.Next(0, N * M + 1);
for (int n = 0; n < N; n++)
{
for (int m = 0; m < M; m++)
{
if (tmp == matrix[n, m])
{
ok = false;
break;
}
}
if (!ok) break;
}
}
matrix[i, j] = tmp;
}
}
}
static void Search()
{
bool someone = false;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
bool ok = true;
int current = matrix[i, j];
for (int k = 0; k < M; k++)
if (current >= matrix[i, k] && k != j)
ok = false;
for (int m = 0; m < N; m++)
if (current < matrix[m, j] && m != i)
ok = false;
if (ok)
{
Console.WriteLine("Value: {0} Index: [{1}, {2}]", matrix[i, j], i, j);
someone = true;
}
}
}
if (!someone)
Console.WriteLine(0);
}
static void Show()
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
Console.Write(matrix[i, j] + " ");
Console.WriteLine();
}
}
}