Просуммировать элементы матрицы, расположенные на диагоналях, параллельных главной, включая главную диагональ - C#
Формулировка задачи:
Дорогие форумчани, помогите с задачками, в понедельник зачет, ничего в голову не идет
Для квадратной матрицы размера nxn просуммировать эле-менты, расположенные на диагоналях, параллельных главной, включая главную диагональ. Результат получить в виде вектора размера 2n – 1.
В соревнованиях по прыжкам со 120-метрового трамплина принимает участие не более 30 спортсменов. Судят соревнования 5 судей. Каждый судья выставляет оценку за стиль прыжка по 20-балльной шкале. Меньшая и большая оценки отбрасываются, ос-тальные суммируются. К этой сумме прибавляются очки за даль-ность прыжка: 120 метров – 60 очков, за каждый метр превышения добавляются по 2 очка, при меньшей дальности отнимаются 2 очка за каждый метр. Получить итоговую таблицу соревнований, содержа-щую фамилию и итоговый результат для каждого участника в поряд-ке занятых мест
Решение задачи: «Просуммировать элементы матрицы, расположенные на диагоналях, параллельных главной, включая главную диагональ»
textual
Листинг программы
class Program
{
static void Main()
{
int SportsmansCount = 5;
CompetitionResult[] results = new CompetitionResult[SportsmansCount];
for (int i = 0; i < SportsmansCount; i++)
results[i] = new CompetitionResult();
BubbleSort(results);
Console.WriteLine("Name\tDistance\tMarks\tTotal");
foreach (CompetitionResult result in results)
Console.WriteLine(result);
Console.Read();
}
class CompetitionResult : IComparable<CompetitionResult>
{
string Name;
int Distance;
int[] Marks;
public CompetitionResult()
{
Console.WriteLine("Введите имя спортсмена: ");
this.Name = Console.ReadLine();
Console.WriteLine("Введите дальность прыжка: ");
this.Distance = int.Parse(Console.ReadLine());
Console.WriteLine("Введите пять оценок (через Enter):");
this.Marks = new int[5];
for (int i = 0; i < 5; i++)
this.Marks[i] = int.Parse(Console.ReadLine());
}
public int GetTotal()
{
int sum = 60, max = int.MinValue, min = int.MaxValue;
foreach (int mark in this.Marks)
{
if (mark < min)
min = mark;
if (mark > max)
max = mark;
sum += mark;
}
sum -= (max + min);
if (this.Distance < 120)
sum -= (120 - Distance) * 2;
else
sum += (Distance - 120) * 2;
return sum;
}
public int CompareTo(CompetitionResult other)
{
int pointsCompareResult = this.GetTotal().CompareTo(other.GetTotal());
if (pointsCompareResult == 0)
return this.Name.CompareTo(other.Name);
else
return pointsCompareResult;
}
public override string ToString()
{
return String.Format("{0}\t{1}\t{2}\t{3}", this.Name, this.Distance, string.Join("; ", this.Marks), this.GetTotal());
}
}
static void BubbleSort<T>(T[] array) where T : IComparable<T>
{
for (int i = 0; i < array.Length; i++)
for (int j = i; j < array.Length; j++)
if (array[i].CompareTo(array[j]) == -1)
{
T tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}