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