Алгоритм расчета результата теста с множественным выбором - PullRequest
1 голос
/ 09 августа 2010

Я борюсь с крайними случаями алгоритма для вычисления результата викторины в стиле A, B, C.

Тест состоит из произвольного числа вопросов, каждый из которых имеет ровно 3 ответа, соответствующих A, B и C. Каждый вопрос отображается отдельно с помощью кнопки продолжения, после того как на все вопросы дан ответ, отображается результат .

Есть 3 возможных результата, соответствующих A, B и C.

Отображаемый результат должен быть наиболее выбранным ответом.

Если два ответа были выбраны одинаково, результат должен быть таким, какой из этих ответов был выбран последним.

Это последняя часть, с которой я борюсь, как лучше всего рассчитать это и что мне нужно сохранить во время теста для этого?

Первоначальный расчет, который у меня есть:

if (countA > countB && countA > countC)
{
    result = "A";
}
else if (countB > countA && countB > countC)
{
    result = "B";
}
else if (countC > countA && countC > countB)
{
    result = "C";
}
else
{
    // two results are equal
}

Как лучше всего рассчитать последний случай?

Ответы [ 3 ]

3 голосов
/ 09 августа 2010

Вопрос, который вы задали, похоже, не учитывает, является ли ответ правильным или нет. В любом случае, вы можете сохранить 7 счетчиков:

  • Количество ответов, A (или правильных ответов A)
  • Количество ответов, B
  • Количество ответов, C
  • Индекс текущего вопроса (для использования в следующих трех счетчиках)
  • Индекс последнего ответа, A (или последний правильный ответ A)
  • Индекс последнего ответа, B
  • Индекс последнего ответа, C

Для каждого вопроса вы увеличиваете «Индекс текущего вопроса». Если вас волнует правильность ответа, выполняйте следующие шаги только тогда, когда он верен. Если вам все равно, всегда делайте следующие шаги.

Если дан ответ A, увеличьте счетчик «Число ответов A» и установите значение «Индекс последнего ответа A».

Когда вы дойдете до конца своей викторины, у вас будет достаточно данных для построения правильного ответа.

1 голос
/ 09 августа 2010

Вы можете хранить все действия (выбирая ответы) в виде данных в виде списка. Если ответ выбран, вы добавляете его в список, в противном случае вы просто удаляете его из списка. При расчете последнего случая перейдите от конца списка и найдите любой из одинаково взвешенных результатов. Первое, что найдено, было выбрано последним. Так как он был выбран последним, это результат.

Используя этот метод, вы также можете подсчитать все опции (A, B и C), просто посчитав вхождения опций в списке.

0 голосов
/ 09 августа 2010

Идея может состоять в том, чтобы ввести массив или 3 дюйма, каждый элемент соответствует A, B или C. Я предполагаю, что каждый вопрос имеет номер.При каждом ответе на вопрос вы сохраняете номер вопроса в этом массиве.Тогда вам просто нужно перебрать массив и посмотреть, какой элемент имеет наибольшее число, т.е. ему дали последний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...