Итак, у меня есть цикл, который берет строку отформатированного ввода с именем и несколькими числами, и выполняет операцию для определения общего балла на основе этих чисел.В конце программы предполагается вывести наивысший балл, а также имя человека, набравшего балл.У меня есть переменная count, которая увеличивается каждый раз, когда она проходит цикл, чтобы подсчитать число предыдущих «общих баллов» в массив.В конце программы этот массив со всеми итогами сортируется от наивысшего к наименьшему, а затем выводится счет итогов [0] для отображения наивысшего балла.Мой вопрос заключается в том, какой самый простой способ получить имя, соответствующее этому номеру, в значение, которое может быть выведено в конце?
Я попытался создать структуру, а затем сделать этот массив частью структуры, но этоприносит много ошибок.Так вот мой код без попыток вывести имя, соответствующее наибольшему количеству баллов
#include <iostream>
#include <cmath>
#include <string>
#include <fstream>
#include <algorithm>
#include <functional>
#include <iomanip>
using namespace std;
int main()
{
cout << "Name " << "Diff " << "Sorted scores " << "Total" << endl;
struct contestants
{
string name;
double difficulty;
double score1;
double score2;
double score3;
double score4;
double score5;
double score6;
double score7;
double score8;
double score9;
};
contestants person;
ifstream divers ("m6dive.txt");
int count = 0;
double scoretotals[50];
while (divers >> person.name >> person.difficulty >> person.score1 >> person.score2 >> person.score3 >> person.score4 >> person.score5 >> person.score6 >> person.score7 >> person.score8 >> person.score9)
{
double scores[9] = { person.score1, person.score2, person.score3, person.score4, person.score5, person.score6, person.score7, person.score8, person.score9 };
std::sort(scores, scores + 9, std::greater< double >()); //sorts from max to min
double total = (scores[1] + scores[2] + scores[3] + scores[4] + scores[5] + scores[6] + scores[7]) * person.difficulty; //computes score (total excluding min,max multiplied by score)
//outputs name, difficulty, scores sorted and total
cout << person.name << "\t" << std::setprecision(1) << fixed << person.difficulty << "\t" << scores[8] << "\t" << "\t" << scores [7] << " "<< scores [6] << " " << scores[5] << " " << scores[4] << " " << scores [3] << " " << scores [2] << " " <<scores[1] << " " << scores [0] << " " << total << endl;
scoretotals[count] = total;
count++;
}
std::sort(scoretotals, scoretotals + 50, std::greater< double >());
cout << "Highest score is " << scoretotals[0];
}
Вывод:
Name Diff Sorted scores Total
Anne 2.0 8.0 8.0 8.5 8.5 9.0 9.0 9.0 9.5 9.5 123.0
Sarah 3.0 8.5 8.5 8.5 8.5 9.0 9.0 9.0 9.5 9.5 186.0
Jon 1.5 6.0 7.0 7.5 7.5 7.5 8.0 8.5 8.5 8.5 81.8
Highest score is 186.0
. . .