Как отбросить наивысший / наименьший балл внутри цикла для соревнований по дайвингу?

#c

#c

Вопрос:

Я пишу код для задачи на C , связанной с соревнованиями по дайвингу. Мой код компилируется и запрашивает у пользователя 5 баллов от 1 до 10. Он также учитывает сложность погружения в диапазоне 1-1,67 и вычисляет общий балл для каждого дайвера и среднее значение для каждого дайвера.

У меня возникли проблемы с выделением наивысшего и наименьшего баллов в цикле, в который только накапливается оценка totalScore , поэтому я не могу провести сравнение, потому что у меня нет ( score1 , score2 , score3 , score4 score5 , ,,,). Вместо этого все значения сохраняются в totalScore , и я не уверен, как сравнить каждый ввод с самым высоким и самым низким по мере их ввода, потому что я использую цикл.

Есть ли какой-либо способ сделать это внутри моего цикла или другим способом?

Я уже пытался использовать оператор if-else, который сравнивает каждый балл с текущим max / min, но все мои результаты сохраняются в одной переменной. Я попытался установить для моего входного балла длинный оператор if-else, но если ввод равен (5,7,6,8,9), то при первой обработке 5 в цикле он сохраняется до «наивысшего балла», потому что логически это в настоящее время наивысший балл, но когда я запускаю следующее число в цикле, оно заменит 5, потому что логически 7 больше 5, а 5 не вводится в lowestscore , потому что цикл уже запущен, и 7 заменил 5.

 for (numJudges = 1; numJudges < 6; numJudges  ) //Input score from 5 Judges
        {
            cout << "Enter the score given by Judge #" << numJudges << ": ";
            cin >> inputScore;
            while (inputScore < 0 || inputScore > 10) // Validate if the input score is between 0-10
            {
                cout << "Invalid score - Please reenter (Valid Range: 0 - 10)" << endl;
                cout << "Enter the score given by Judge #" << numJudges << ": ";
                cin >> inputScore;
            }
            totalScore  = inputScore;//Add score to total
        }
        cout << "What was the degree of difficulty? "; //Input degree of difficulty
        cin >> diveDifficulty;
        while (1 > diveDifficulty || diveDifficulty > 1.67) // Validate degree of difficulty
        {
            cout << "Invalid degree of difficulty - Please reenter (Valid Range: 1 - 1.67)n";
            cout << "What was the degree of difficulty? ";
            cin >> diveDifficulty;
        }

        diverTotal = totalScore - highScore - lowScore;
        overallScore = (diverTotal / 3) * diveDifficulty;
        totalScore = saveTotal;
  

Например, ввод:

Судья 1: 8, Судья 2: 8, Судья 3: 8, судья 4: 7, судья 5: 9,

Сложность погружения: 1

Общий балл должен быть просто 8, если добавить только 8 и отбросить 7 и 9, затем разделить на 3 оставшихся балла и умножить на 1; однако всякий раз, когда я использую оператор сравнения if-else (в разделе ‘// добавить балл к итогу’), он некорректно сравнивает текущий ввод с текущим высоким / низким результатом. Я не уверен, возможно ли вообще иметь только одну входную переменную, в которой хранятся все результаты. Я думаю, что мне нужно использовать цикл внутри цикла, но я не уверен, как это настроить.

Комментарии:

1. std::minmax_element должно быть полезно.

Ответ №1:

 int max = 0
  

Когда пользователь вводит число или судья выводит оценку, просто сравните это число с максимальным. Если число больше max, тогда max = результат.

Продолжая делать это, вы гарантированно получите максимальное значение в конце вашего цикла ввода.

Та же концепция применяется в течение минуты. Просто нужно int min = INT_MAX

Ответ №2:

Что вам нужно сделать, это отслеживать минимальное и максимальное значение во время цикла, когда вы получаете входные данные.

 // Initialize these before the first loop...
double highScore = 0.0;
double lowScore = 10.0;
...

...
while (inputScore < 0 || inputScore > 10) // Validate if the input score is between 0-10
{
   cout << "Invalid score - Please reenter (Valid Range: 0 - 10)" << endl;
   cout << "Enter the score given by Judge #" << numJudges << ": ";
   cin >> inputScore;
}
highScore = std::max(inputScore, highScore);
lowScore = std::min(inputScore, lowScore);
totalScore  = inputScore;
...
  

Комментарии:

1. Большое спасибо за ответ. Я попробовал это, и это работает для некоторых случаев и по какой-то причине не работает для других. Я ввожу (3,4.5,6.7,8,9.2) степень сложности = 1,2 для первого цикла, и я получаю правильный ответ, который равен 7,68, когда я ввожу второй цикл (5.7,6.8,7.6,8.7,6.7) степень сложности = 1.1, я получаю 8.54 вместо 7.74. Как ни странно, если я введу номера моего второго цикла при первом запуске цикла, то оба будут правильными после 2 циклов. Это так близко, как я получил до сих пор, поэтому я действительно ценю этот ответ.

2. @Addy Странно, если я введу номера моего второго цикла — Вероятно, вы забыли сбросить переменные, которые управляют наименьшим и наибольшим значениями, в их начальные состояния во втором цикле?

3. Спасибо, Пол. Я сделал то, что вы сказали, и теперь моя программа работает безупречно.