Как вывести средний бал? - C#
Формулировка задачи:
На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Имя> — строка, состоящая не более чем из 15 символов, <оценки> - через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:
Иванов Петр 4 2 4
Требуется написать как можно более эффективную программу, которая будет выводить на экран
фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики,
набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена
Есть пример в порядке уменьшения числа двоек:
я понял что нужно находить среднее арифметическое пример:
но как это реализовать?
Console.WriteLine("Введите n");
int n = int.Parse(Console.ReadLine());// введите число учеников
List<string> list = new List<string>(n);
for (int i = 0; i < n; i++)
{
list.Add(Console.ReadLine());
}
var answer = from l in list
where l.Contains('2')
orderby new Regex("2").Matches(l).Count descending
select l.Substring(0, l.LastIndexOf(' ') - 4);
foreach (var a in answer)
{
Console.WriteLine(a);
}
Console.ReadKey();
Console.ReadLine(); double[] arr = new double[3] { d1, d2, d3 };
или может лучше забросить все сведения в файл и от туда считывать?
Решение задачи: «Как вывести средний бал?»
textual
Листинг программы
class Program
{
static void Main(string[] args)
{
List<students> list = new List<students>();
Random rand = new Random();
list.Add(new students() { surname = "Иванов", name = "Петр", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Петров", name = "Андрей", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Джеймсон", name = "Игорь", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Джексон", name = "Евгений", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Луев", name = "Виталий", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Цезарь", name = "Дмитрий", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Далий", name = "Петр", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Андерсон", name = "Петр", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Малахов", name = "", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Ласюк", name = "Владимир", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
list.Add(new students() { surname = "Андри", name = "Петр", firstMark = rand.Next(1, 5), secondMark = rand.Next(1, 5), thirdMark = rand.Next(1, 5) });
List<students> newList = new List<students>();
foreach(var item in list)
{
double sr = ((double)item.firstMark + (double)item.secondMark + (double)item.thirdMark) / 3;
newList.Add(new students() { surname = item.surname, name = item.name, srMark = sr });
Console.WriteLine(item.surname + " " + item.name + " " + item.firstMark + " " + item.secondMark + " " + item.thirdMark + ". Средний балл = {0:0.00}", sr );
}
Console.WriteLine("Худшие ученики");
newList = newList.OrderBy(o => o.srMark).ToList();
for (int i = 0; i < 3; i++)
{
Console.WriteLine(newList[i].surname + " " + newList[i].name + " " + newList[i].srMark);
}
for (int i = 4; i < newList.Count; i++)
{
if (newList[i].srMark == newList[3].srMark)
{
Console.WriteLine(newList[i].surname + " " + newList[i].name + " " + newList[i].srMark);
}
}
Console.ReadLine();
}
}
class students
{
public string surname { get; set; }
public string name { get; set; }
public int firstMark { get; set; }
public int secondMark { get; set; }
public int thirdMark { get; set; }
public double srMark { get; set; }
}