我需要设计一个模块(用C ++编写)来评估包含多个选项正确的问题的学生表(带有部分标记);
我的意见是: -
上述问题类型的评估规则如下:
例如,如果(A),(C)和(D)是问题的正确选项,则标记所有这三个将导致+4标记;仅标记(A)和(D)将产生+2标记;并且标记(A)和(B)将导致-2标记,因为标记了错误的选项。
注意:上述规则可能会在以后更改并变得复杂。
我想到了以下方法: -
如果您认为上述方法存在缺陷或有更好的解决方案,请提供您的建议。
使用std::set_symmetric_difference。确保输入的std::vector
s都已排序。它将为您提供他们没有共同点的元素。因此,如果结果为空集,则学生答案与正确答案完全相同。否则,检查结果元素是否在答案中。
我会做类似以下的事情(TL; DR:硬编码):
std::vector<char> answer_student, answer_correct, answer_diff;
int mark = -2;
if (answer_student.empty()) {
mark = 0;
}
std::sort(answer_student.begin(), answer_student.end());
std::sort(answer_correct.begin(), answer_correct.end());
std::set_symmetric_difference(
answer_student.begin(), answer_student.end(),
answer_correct.begin(), answer_correct.end(),
std::back_inserter(answer_diff)
);
if (answer_diff.empty()) {
mark = 4;
} else {
// ...
}
免责声明:未经测试。只需看一下它就可以作为一个例子来帮助您入门。