Упорядочить строки матрицы по возрастанию количества одинаковых элементов в каждой строке - 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; } //Если все элементы в столбике положительные обрываем цикл и выводим номер столбика
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д