Поиск минимальных элементов в двумерном массиве - C#

Узнай цену своей работы

Формулировка задачи:

Задача: Составить команду из четырех лучших бегунов для участия в эстафете 4×100. Нужно выбрать из двумерного массива 4 минимальных элемента.Я знаю один довольно простой метод через сравнения, но он здесь не эффективен так как у спортсменов могут быть одинаковые результаты, а получиться так что берут только одного, а остальные отбрасываются. Неэффективный метод ниже.
   int min = int.MinValue;
            int min2 = int.MinValue;
            int min3 = int.MinValue;
            int min4 = int.MinValue;
            int[,] Table = new int[N,N];
            for (int i = 0; i < N; i++)
                for (int j = 0; j < N; j++)
                    Table[i,j] = (int)dataGridView1[i, j].Value;
            for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                {
                    if(Table[i,j]>min)
                        min = Table[i, j];
                    if (Table[i, j]>min2 && min > Table[i, j])
                        min2 = Table[i, j];
                    if (Table[i, j] > min3 && min2 > Table[i, j])
                        min3 = Table[i, j];
                    if (Table[i, j] > min4 && min3 > Table[i, j])
                    min4 = Table[i, j];
                }
            textBox1.Text += "Спортсмен 1-" + min + "\r\n";
            textBox1.Text += "Спортсмен 2-" + min2 + "\r\n";
            textBox1.Text += "Спортсмен 3-" + min3 + "\r\n";
            textBox1.Text += "Спортсмен 4-" + min4 + "\r\n";
        }
    }
Посоветуйте еще какие либо более эффективные методы. Только не LINQ так как там используются лямбда выражения, которые мы не проходили и я не имею понятия как это работает

Решение задачи: «Поиск минимальных элементов в двумерном массиве»

textual
Листинг программы
//для бегунов будет минимум, а вот для пауэрлифтеров, наоборот должен быть максимум 
min1=min2=min3=min4=Int32.Max;
//индекс чтоб отличить двух одинаковых
int id1, id2, id3, id4; id1=id2=id3=id4=-1;
for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                {
                    if(Table[i,j]<min1)
                    {
                        min1 = Table[i, j];id1=i*N+j;
                    }
//если это не тот спортсмен что и первый, но с тем же результатом
                    if(min1==Table[i, j] && (i*N+j)!=id1)
                    {
                         min2=Table[i, j]; id2=i*N+j;
                    }
//если не с тем же результатом, что первый, но лучшим, чем у прошлого второго
                    else if (Table[i, j]<min2)
                    {
                        min2 = Table[i, j]; id2=i*N+j;
                    }
                    if(min2==Table[i, j] && (i*N+j)!=id2)
                    {
                         min3=Table[i, j]; id3=i*N+j;
                    }
                    else if (Table[i, j]<min3)
                    {
                        min3 = Table[i, j]; id3=i*N+j;
                    }
                   if(min3==Table[i, j] && (i*N+j)!=id3)
                    {
                         min4=Table[i, j]; id4=i*N+j;
                    }
                    else if (Table[i, j]<min4)
                    {
                        min4 = Table[i, j]; id4=i*N+j;
                    }
                }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы