华为机试题解析:评委打分算法

需积分: 33 27 下载量 62 浏览量 更新于2024-07-26 收藏 205KB PDF 举报
"华为机试题上机总结,包括选秀节目打分算法和数组处理问题" 在华为的机试题中,我们经常会遇到一些实际应用问题的编程挑战。以下是对两道典型题目的详细分析: 1. **选秀节目打分算法** 这个问题要求编写一个`cal_score`函数,根据给定的评委打分和评委类型计算选手的最终得分。函数接受三个参数:`score[]`存储每个评委的分数,`judge_type[]`表示评委类型(1代表专家,2代表大众),`n`是评委总数。 首先,函数会检查输入是否有效,即`score[]`、`judge_type[]`是否为空以及`n`是否为零。接着,它分别计算专家评委和大众评委的总分`sum1`和`sum2`,以及它们的数量`count1`和`count2`。 如果没有大众评委(`count2==0`),则直接用专家评委的平均分作为总分。否则,根据规则计算总分:专家评委平均分的60%加上大众评委平均分的40%,最后结果取整。函数返回这个计算出的总分。 在`main`函数中,给出了一个示例输入,包含3个评委,其中2个是专家,1个是大众。调用`cal_score`函数并打印结果。 2. **数组元素重新排列** 第二题要求对给定的数组`input[]`进行操作,如果数组长度`n`是奇数,将最大元素放在新数组`output[]`的中间位置;如果`n`是偶数,题目描述不完整,通常可能需要将最大元素分别放在新数组的两端。对于这种问题,我们需要找到数组中的最大值,然后根据数组长度的奇偶性决定其放置位置。 解决这个问题的一般步骤包括: - 初始化两个指针,一个指向数组的起始位置,另一个指向结束位置。 - 使用循环找到数组中的最大值及其索引。 - 如果数组长度为奇数,将最大值复制到`output[(n-1)/2]`,然后从最大值的索引开始,将剩余元素依次复制到`output[]`。 - 如果数组长度为偶数,情况会更复杂,可能需要将最大值分别放入`output[0]`和`output[n-1]`,然后将其他元素填充到中间位置。 这类问题通常涉及到数组遍历、比较操作、条件判断以及元素的移动。在实际编程时,需要确保边界条件的处理正确无误,避免越界访问数组。 通过这些题目,我们可以看到华为机试不仅考察基础的编程能力,还注重实际问题的解决能力和逻辑思维。准备这类机试时,应加强数据结构、算法以及常见问题的处理技巧的学习。