Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы - C#
Формулировка задачи:
Дана действительная квадратная матрица порядка N(N-нечётное), все элементы которой различны. Найти найбольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом стоящим на пересичении этих диагоналей
Решение задачи: «Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы»
textual
Листинг программы
using System;
using System.Collections.Generic;
namespace TestConsole
{
static class Task
{
delegate bool RealPredicate(double x);
static double ReadNumber(string Caption, RealPredicate P = null)
{
double v = 0.0;
bool flag = false;
while (!flag)
{
Console.Write(Caption);
flag = double.TryParse(Console.ReadLine(), out v);
flag &= P != null && P(v);
}
return v;
}
static void Main()
{
// нечетный положительный размер матрицы
int n = (int)ReadNumber("Размер матрицы: ",
x => (int)x == x && x > 0 && x % 2 == 1);
// Ввод элементов матрицы, все элементы должны быть различны
double[,] d = new double[n, n];
HashSet<double> hs = new HashSet<double>();
for (int r = 0; r < n; r++ )
{
for (int c = 0; c < n; c++)
{
d[r, c] = ReadNumber(
string.Format("Элемент [{0}, {1}]: ", r, c),
x => !hs.Contains(x));
hs.Add(d[r, c]);
}
}
// Поиск максимума
int rm = n / 2, cm = n / 2;
for (int i = 0; i < n; i++ )
{
if (d[i, i] > d[rm, cm]) { rm = i; cm = i; }
if (d[i, n - i - 1] > d[rm, cm]) { rm = i; cm = n - i - 1; }
}
// Обмен
d[rm, cm] = d[n / 2, n / 2] + 0 * (d[n / 2, n / 2] = d[rm, cm]);
// Вывод
for (int r = 0; r < n; r++)
{
for (int c = 0; c < n; c++)
Console.Write("{0, 5} ", d[r, c]);
Console.WriteLine();
}
Console.ReadLine();
}
}
}