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