对候选人进行排名的最好、最有效的方法是什么?
what is the best, efficient approach to rank the candidates
有N名候选人报名回答一系列选择题。设计一个有效的方法来评估答案并对候选人进行排名。
vector <string> Evaluate (const string& answer, const vector<string>& param)
{
// answer - will have the answer for multiple choice question.
// like X X X X X where each X is a capital letter (A-D)
// (e.g) A B A C D
// param will have candidate name followed by his/her answer
// (e.g) param[0] - "Foo A C A C D"
// param[1] - "Bar D D A C B"
// return candidates name with highest % of mark in result[0],
// next highest in result[1] and so on.
}
我能想到的一种方法是,将答案标记化&参数化并比较它。但我在寻找更好的方法。有什么建议吗?
PS:这不是家庭作业。在topcoder
如果假设答案之间有一个空格,则可以计算单个候选人的分数而不需要标记化。首先,搜索要跳过的第一个空格,然后将剩下的字符串传递给以下函数
int compute_score(const string& answer_key, const char answer[])
{
int score = 0;
for (unsigned i = 0; i < answer_key.size(); i+=2) {
score += answer[i]==answer_key[i];
}
return score;
}
一种解决方案是检查所有候选人并按0 - 5的等级对他们的答案进行评分,其中0为完美,1为错误,等等。评分后,将其插入列表中。然后,在对所有候选人进行评分后,按等级对列表进行排序(或在插入它们时对它们进行排序)。
或者,您可以在添加它们时将它们添加到二叉搜索树中。这可能比将它们插入列表并排序要快。
另一个想法是使用静态变量来存储到目前为止百分比最高的候选对象的名称。如果学生的百分比高于当前候选人,则在进一步的函数调用时使用学生的名字更新静态变量的值,最后,得分最高的学生将在静态变量中显示该值。
如果您不想要所有候选人的列表%,并且也有使用静态变量的权限,这将是一个更好的解决方案。
相关文章:
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 比较C++变量的最有效方法
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 检查两个向量是否并行的最有效方法
- 从浮点数中删除小数部分但保留类型的有效方法
- 传递非泛型函数的最有效方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 创建字符串数组的有效方法
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 从std::map值中获取密钥的有效方法