Упорядочить строки матрицы по возрастанию количества одинаковых элементов в каждой строке - C# (179945)

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

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

 private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.RowCount = 10;
            dataGridView1.ColumnCount = 10;
            
            Random rand = new Random();
            for (i = 0; i < 10; i++)
                for (j = 0; j < 10; j++)
                    a[i, j] = rand.Next(-10, 10);
            for (i = 0; i < 10; i++)
                for (j = 0; j < 10; j++)
                    dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            int[] temp = new int[10];
            int s=0, s2=0,  k, w=0, j2;
 
            while (w < 10)
            {
                w++;
                for (i = 0; i < 9; i++)
                {
                    
                    for (j = 0; j < 10; j++)
                    {
                        for (j2 = 0; j2 < 10; j2++)
                        {
                            if (a[i, j] == a[i, j2])
                            {
                                s = s + 1;
                                
                            }
                        }
                        for (j2 = 0; j2 < 10; j2++)
                        {
                          if (a[i + 1, j] == a[i + 1, j2])
                            {
                                s2 = s2 + 1;
 
                            }
                            
                        }
                    }
                    label1.Text = Convert.ToString(s);
                    if (s2 < s)
                    {
                        for (j = 0, k = 0; (j < 10) & (k < 10); j++, k++)
                        {
                            temp[k] = a[i, j];
                            a[i, j] = a[i + 1, j];
                            a[i + 1, j] = temp[k];
                        }
                    }
                    s = 0; s2 = 0;                   
                }
            }     
            for (i = 0; i < 10; i++)
                for (j = 0; j < 10; j++)
                    dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
  
        }
В принципе почти работает, вот только в этом месте
 for (i = 0; i < 9; i++)
                {
                    
                    for (j = 0; j < 10; j++)
                    {
                        for (j2 = 0; j2 < 10; j2++)
                        {
                            if (a[i, j] == a[i, j2])
                            {
                                s = s + 1;
                                
                            }
                        }
                        for (j2 = 0; j2 < 10; j2++)
                        {
                          if (a[i + 1, j] == a[i + 1, j2])
                            {
                                s2 = s2 + 1;
 
                            }
                            
                        }
                    }
не могу сделать так что бы при обнаружении одинакового элемента переходило на следующий элемент в строке, который будет сравниваться с остальными... Помогите)
В итоге пришел к этому, но все ровно не работает. После прохода и s и s2 = 10.
for (i = 0; i < 9; i++) //Проход по строкам
                {
                    for (j = 0; j < 10; j++) //Проход по столбцам
                    {
                        for (j2 = j; j2 < 10; j2++)  //Проход по строке начиная с элемента который еще не проверялся
                            if (a[i, j] == a[i, j2]) { s++; break; }; //Сравнение элементов строки
                        for (j2 = j; j2 < 10; j2++)  //Проход по следующей строке начиная с элемента который еще не проверялся
                            if (a[i + 1, j] == a[i + 1, j2]) { s2++; break; };  //Сравнение элементов строки
                    }

Решение задачи: «Упорядочить строки матрицы по возрастанию количества одинаковых элементов в каждой строке»

textual
Листинг программы
int[,] a = new int[10, 10];
        int i, j;
        private void Form1_Load_1(object sender, EventArgs e)
        {
            dataGridView1.RowCount = 10;
            dataGridView1.ColumnCount = 10;
 
            Random rand = new Random();
            for (i = 0; i < 10; i++)  //Заполнение массива
                for (j = 0; j < 10; j++)
                    a[i, j] = rand.Next(-10, 10);
            for (i = 0; i < 10; i++)
                for (j = 0; j < 10; j++)
                    dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
        }
 
 
        private void button2_Click_1(object sender, EventArgs e)
        {
            int temp;
            int s = 0, s2 = 0, w, j2;
            bool done;
            for (w = 0; w < 100; w++)  //Количество проходов по матрице
            {
                for (i = 0; i < 9; i++) //Проход по строкам
                {
                    for (j = 0; j < 10; j++) //Проход по столбцам
                    {
                        done = false;
                        for (j2 = 0; j2 < 10; j2++) //Поиск одинаковых элементов
                        {
                            if ((a[i, j] == a[i, j2]) && (j != j2))
                            {
                                done = true;
                                break;
                            }
                        }
                        if (done) s++;
                        done = false;
                        for (j2 = 0; j2 < 10; j2++) //Поиск одинаковых элементов в следующей строчке
                        {
 
                            if ((a[i + 1, j] == a[i + 1, j2]) && (j != j2))
                            {
                                done = true;
                                break;
                            }
                        }
                        if (done) s2++;
                    }
                    if (s2 < s)  //Сравнение количество одинаковых эл. 
                    {
                        for (j = 0; j < 10; j++) //Замена строки на следующую
                        {
                            temp = a[i, j];
                            a[i, j] = a[i + 1, j];
                            a[i + 1, j] = temp;
                        }
                    }
                }
 
                for (i = 0; i < 10; i++) //Вывод новой матрицы
                    for (j = 0; j < 10; j++)
                        dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
 
        {
            int o = 1,s = 0;
                for (j = 0; j < 10; j++) //Проход по столбцам 
            {   s = 0;
                for (i = 0; i < 10; i++) //Проход по строкам
                    {
                        if (a[i, j] < 0) //При обнаружении отрицательного элемента обрываем цикл и увеличиваем номер столбика "o"
                        { o++; break; }
                        if (a[i, j] >= 0) s++; //Поиск положительных чисел
                    }
                if (o > 10) label1.Text = "Таких столбиков нет";
                if (s==10) { label1.Text = Convert.ToString(o); break; } //Если все элементы в столбике положительные обрываем цикл и выводим номер столбика
            }
           
        }

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


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

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

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