华为机试题目
从给定的文件信息中,我们可以提取出两个主要的IT知识点:一个是关于计算选秀节目中选手得分的算法实现,另一个是关于数组排序及重新排列的算法实现。下面将对这两个知识点进行详细阐述。 ### 计算选秀节目选手得分的算法 #### 问题描述 在选秀节目中,参赛者会收到来自不同类型的评委的评分,包括专家评委和大众评委。选手的最终得分计算规则如下: 1. 分别计算专家评委和大众评委给出的评分平均值。 2. 如果存在大众评委,那么总分 = 专家评委平均分 * 0.6 + 大众评委平均分 * 0.4;如果不存在大众评委,总分 = 专家评委平均分。 3. 最终得分需取整。 #### 解决方案 实现这个功能的代码示例如下: ```c int cal_score(int score[], int judge_type[], int n) { int expert = 0; int publicJudge = 0; int numOfExpert = 0; int index; for (index = 0; index < n; index++) { if (judge_type[index] == 1) { expert += score[index]; numOfExpert++; } else { publicJudge += score[index]; } } int averageScore = 0; if (numOfExpert == n) { averageScore = expert / n; } else { averageScore = 0.6 * expert / numOfExpert + 0.4 * publicJudge / (n - numOfExpert); } return averageScore; } ``` ### 数组排序与重新排列算法 #### 问题描述 对于给定的数组,如果数组长度为奇数,将最大元素放置于数组中间;若长度为偶数,最大元素置于中间靠右位置。然后,其余元素按照降序排列,并在一左一右的位置依次填充。 #### 解决方案 使用冒泡排序算法对数组进行降序排序,然后根据数组长度的奇偶性决定最大元素的位置,最后将剩余元素按照降序、一左一右的规则填充。 ```c void bubbleSort(int a[], int len) { int index1 = 0; int index2 = 0; for (index1 = 0; index1 < len - 1; index1++) { for (index2 = 1; index2 < len - index1; index2++) { if (a[index2] < a[index2 - 1]) { // Swap elements using XOR swap technique a[index2] = a[index2] ^ a[index2 - 1]; a[index2 - 1] = a[index2] ^ a[index2 - 1]; a[index2] = a[index2] ^ a[index2 - 1]; } } } } void moveArray(int a[], int len) { int mid = len / 2; int left = mid - 1; int right = mid + 1; int index = len - 1; int b[10]; bubbleSort(a, len); b[mid] = a[index--]; while (index >= 0) { b[left--] = a[index--]; b[right++] = a[index--]; } for (left = 0; left < len; left++) { printf("%d", b[left]); } } ``` 通过以上代码实现,我们不仅可以有效地解决给定的两个问题,而且还能加深对数组操作、循环控制结构以及排序算法的理解。这不仅对准备面试的人来说非常有帮助,同时也适用于任何需要处理类似数据结构和算法场景的软件开发人员。
剩余14页未读,继续阅读
- 粉丝: 0
- 资源: 30
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页