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

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

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

Листинг программы
  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3. dataGridView1.RowCount = 10;
  4. dataGridView1.ColumnCount = 10;
  5. Random rand = new Random();
  6. for (i = 0; i < 10; i++)
  7. for (j = 0; j < 10; j++)
  8. a[i, j] = rand.Next(-10, 10);
  9. for (i = 0; i < 10; i++)
  10. for (j = 0; j < 10; j++)
  11. dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
  12. dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
  13. dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
  14. }
  15. private void button2_Click(object sender, EventArgs e)
  16. {
  17. int[] temp = new int[10];
  18. int s=0, s2=0, k, w=0, j2;
  19. while (w < 10)
  20. {
  21. w++;
  22. for (i = 0; i < 9; i++)
  23. {
  24. for (j = 0; j < 10; j++)
  25. {
  26. for (j2 = 0; j2 < 10; j2++)
  27. {
  28. if (a[i, j] == a[i, j2])
  29. {
  30. s = s + 1;
  31. }
  32. }
  33. for (j2 = 0; j2 < 10; j2++)
  34. {
  35. if (a[i + 1, j] == a[i + 1, j2])
  36. {
  37. s2 = s2 + 1;
  38. }
  39. }
  40. }
  41. label1.Text = Convert.ToString(s);
  42. if (s2 < s)
  43. {
  44. for (j = 0, k = 0; (j < 10) & (k < 10); j++, k++)
  45. {
  46. temp[k] = a[i, j];
  47. a[i, j] = a[i + 1, j];
  48. a[i + 1, j] = temp[k];
  49. }
  50. }
  51. s = 0; s2 = 0;
  52. }
  53. }
  54. for (i = 0; i < 10; i++)
  55. for (j = 0; j < 10; j++)
  56. dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
  57. }
В принципе почти работает, вот только в этом месте
Листинг программы
  1. for (i = 0; i < 9; i++)
  2. {
  3. for (j = 0; j < 10; j++)
  4. {
  5. for (j2 = 0; j2 < 10; j2++)
  6. {
  7. if (a[i, j] == a[i, j2])
  8. {
  9. s = s + 1;
  10. }
  11. }
  12. for (j2 = 0; j2 < 10; j2++)
  13. {
  14. if (a[i + 1, j] == a[i + 1, j2])
  15. {
  16. s2 = s2 + 1;
  17. }
  18. }
  19. }
не могу сделать так что бы при обнаружении одинакового элемента переходило на следующий элемент в строке, который будет сравниваться с остальными... Помогите)
В итоге пришел к этому, но все ровно не работает. После прохода и s и s2 = 10.
Листинг программы
  1. for (i = 0; i < 9; i++) //Проход по строкам
  2. {
  3. for (j = 0; j < 10; j++) //Проход по столбцам
  4. {
  5. for (j2 = j; j2 < 10; j2++) //Проход по строке начиная с элемента который еще не проверялся
  6. if (a[i, j] == a[i, j2]) { s++; break; }; //Сравнение элементов строки
  7. for (j2 = j; j2 < 10; j2++) //Проход по следующей строке начиная с элемента который еще не проверялся
  8. if (a[i + 1, j] == a[i + 1, j2]) { s2++; break; }; //Сравнение элементов строки
  9. }

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

textual
Листинг программы
  1. int[,] a = new int[10, 10];
  2.         int i, j;
  3.         private void Form1_Load_1(object sender, EventArgs e)
  4.         {
  5.             dataGridView1.RowCount = 10;
  6.             dataGridView1.ColumnCount = 10;
  7.  
  8.             Random rand = new Random();
  9.             for (i = 0; i < 10; i++)  //Заполнение массива
  10.                 for (j = 0; j < 10; j++)
  11.                     a[i, j] = rand.Next(-10, 10);
  12.             for (i = 0; i < 10; i++)
  13.                 for (j = 0; j < 10; j++)
  14.                     dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
  15.             dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
  16.             dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
  17.         }
  18.  
  19.  
  20.         private void button2_Click_1(object sender, EventArgs e)
  21.         {
  22.             int temp;
  23.             int s = 0, s2 = 0, w, j2;
  24.             bool done;
  25.             for (w = 0; w < 100; w++)  //Количество проходов по матрице
  26.             {
  27.                 for (i = 0; i < 9; i++) //Проход по строкам
  28.                 {
  29.                     for (j = 0; j < 10; j++) //Проход по столбцам
  30.                     {
  31.                         done = false;
  32.                         for (j2 = 0; j2 < 10; j2++) //Поиск одинаковых элементов
  33.                         {
  34.                             if ((a[i, j] == a[i, j2]) && (j != j2))
  35.                             {
  36.                                 done = true;
  37.                                 break;
  38.                             }
  39.                         }
  40.                         if (done) s++;
  41.                         done = false;
  42.                         for (j2 = 0; j2 < 10; j2++) //Поиск одинаковых элементов в следующей строчке
  43.                         {
  44.  
  45.                             if ((a[i + 1, j] == a[i + 1, j2]) && (j != j2))
  46.                             {
  47.                                 done = true;
  48.                                 break;
  49.                             }
  50.                         }
  51.                         if (done) s2++;
  52.                     }
  53.                     if (s2 < s)  //Сравнение количество одинаковых эл.
  54.                     {
  55.                         for (j = 0; j < 10; j++) //Замена строки на следующую
  56.                         {
  57.                             temp = a[i, j];
  58.                             a[i, j] = a[i + 1, j];
  59.                             a[i + 1, j] = temp;
  60.                         }
  61.                     }
  62.                 }
  63.  
  64.                 for (i = 0; i < 10; i++) //Вывод новой матрицы
  65.                     for (j = 0; j < 10; j++)
  66.                         dataGridView1.Rows[i].Cells[j].Value = a[i, j].ToString();
  67.             }
  68.         }
  69.  
  70.         private void button1_Click(object sender, EventArgs e)
  71.  
  72.         {
  73.             int o = 1,s = 0;
  74.                 for (j = 0; j < 10; j++) //Проход по столбцам
  75.             {   s = 0;
  76.                 for (i = 0; i < 10; i++) //Проход по строкам
  77.                     {
  78.                         if (a[i, j] < 0) //При обнаружении отрицательного элемента обрываем цикл и увеличиваем номер столбика "o"
  79.                         { o++; break; }
  80.                         if (a[i, j] >= 0) s++; //Поиск положительных чисел
  81.                     }
  82.                 if (o > 10) label1.Text = "Таких столбиков нет";
  83.                 if (s==10) { label1.Text = Convert.ToString(o); break; } //Если все элементы в столбике положительные обрываем цикл и выводим номер столбика
  84.             }
  85.            
  86.         }

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


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

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

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы