2011年华为软件校园招聘编程测验类别:软件C/C++语言编程题(共3题,第一题20分,第二题30分,第三题50分,共100分)注意:1、请上机编写程序,按题目要求提交文件。
[详见考试说明,点击进入考试说明]2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。
两者相同则得分,不同则不得分。
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、被要求实现的函数如果包含返回参数,该返回参数涉及的空间分配和释放均在函数外完成,在被要求实现函数内部可以直接使用返回参数7、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分8、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目1.评委打分(20分)∙问题描述:在评委打分的比赛中,通常采取去掉一个最高分和最低分,再求平均分的做法,主要是为了公平,公正和公开的原则,防止有人买通评委,有特别的高分出现,另外,也可以防止因为评委个人原因,对选手有“低见”给特别低的分。
去掉最高分最低分能够求出较为准确的平均分。
请编写程序实现上述计分过程∙要求实现函数:int score_calc(int n, int score[])【输入】int n,评委人数n(n>=3)int score[],每个评委的打分(百分制)【输出】无【返回】选手最终得分(取整)注:取整和四舍五入不同,取整只保留数值的整数部分,小数部分丢弃。
比如7.3和7.6,取整后都为7∙示例输入:int n = 5;int score[] = {75, 80, 75, 70, 80}输出:无返回:762.按要求排序(30分)∙问题描述:请编程实现将输入自然数组中的数字按要求处理并放入到输出数组中1、偶数按从大到小排序2、奇数按从小到大排序3、将奇数和偶数按顺序间插后放入输出数组,奇数在前,偶数在后。
奇数和偶数数目不等,奇数和偶数数目不等时,多出的数字无法间插的就按顺序放置比如:输入数组input[]={1,12,32,15,2,67,8,9,12,3,3,5}奇数排序:1,3,3,5,9,15,67偶数排序:32,12,12,8,2输出数组output[]={1,32,3,12,3,12,5,8,9,2,15,67}∙要求实现函数:void my_sort(int n, int input[], int output[])【输入】int n,输入自然数个数int input[],输入自然数【输出】int output[],按要求排列好的输出数据【返回】无∙示例输入:int n = 12; int input[]={1,12,32,15,2,67,8,9,12,3,3,5}输出:output[]={1,32,3,12,3,12,5,8,9,2,15,67}3.哈希求值∙问题描述:请按照下述规则计算得到输入整数数组中每个正整数的对应输出值1、对于第i(i<=17)个输入的正整数,求得该正整数与17相除的余数。
如果该余数与任意第j个输入正整数(j<i)的输出值不同,则将该余数作为第i个输入正整数的输出值2、否则,将第1步得到的余数+1后,再与17相除求得余数,如果该余数与任意第j个输入正整数(j<i)的输出值不同,则将该余数作为第i个输入正整数的输出值3、否则,将第2步得到的余数+2后,再与17相除求得余数,如果该余数与任意第j个输入正整数(j<i)的输出值不同,则将该余数作为第i个输入正整数的输出值。
N、直到求得第i个输入正整数的输出值为止比如:输入数组input[]={18,2,19,36,53}对于第1个输入数字18,18 mod 17 = 1,1没有出现过,则18的输出为1对于第2个输入数字2,2 mod 17 = 2,2没有出现过,则2的输出为2对于第3个输入数字19,19 mod 17 = 2,2已经出现,则(2+1) mod 17 = 3,3没有出现过,则19的输出为3对于第4个输入数字36,36 mod 17 = 2,2已经出现过,则(2+1) mod 17 = 3,3也已经出现过,则(3+2) mod 17 = 5,5没有出现过,则36的输出是5对于第5个输入数字53,53 mod 17 = 2,2已经出现过,则(2+1) mod 17 = 3,3已经出现过,则(3+2) mod 17 = 5,5已经出现过,则(5+3) mod 17 = 8,8没有出现过,则53的输出为8最后输出为output[]={1,2,3,5,8}∙要求实现函数:void hash_17(int n, int input[], int output[])【输入】int n,输入数组个数,n<=17input[],输入正整数【输出】 int output[],对应输出【返回】无∙示例输入:int n = 5;int input[]={18,2,19,36,53}输出:int output[]={1,2,3,5,8}编程框架下载2011年华为软件校园招聘编程测验类别:软件C/C++语言编程题(共3题,第一题20分,第二题30分,第三题50分,共100分)注意:1、请上机编写程序,按题目要求提交文件。
[详见考试说明,点击进入考试说明]2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。
两者相同则得分,不同则不得分。
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、被要求实现的函数如果包含返回参数,该返回参数涉及的空间分配和释放均在函数外完成,在被要求实现函数内部可以直接使用返回参数7、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分8、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目1.评委打分(20分)∙问题描述:在当下的大型选秀活动中,经常采用专业评委和大众评委分别对选手进行评分的方式。
我们设计一个评分过程,专业评委和大众评委均对选手表现进行百分制打分,所有专业评委评分的平均分作为选手最终专业评委打分,占比60%。
所有大众评委评分的平均分作为选手最终大众评委打分,占比40%。
如果没有大众评委,则专业评委打分作为选手的最终得分比如:2名专业评委,分别打分65和75。
2名大众评委,分别打分85和95,则选手的最终专业评委打分为70,最终大众评委打分为90,最终得分为70*60%+90*40%=78。
2名专业评委,分别打分65和75。
无大众评委,则选手的最终专业评委打分为70,最终得分为70请编写程序实现上述记分过程。
∙要求实现函数:int score_calc(int n, int judge_type[], int score[])【输入】int n,评委总人数n(专业评委和大众评委之和,大众评委数目可能为0,即没有大众评委。
计算平均分时出现0做除数会导致程序崩溃,请特别注意)int judge_type[],评委类型。
judge_type[i]值为1表示第i个评委为专业评委,judge_type[i]值为2表示第i个评委为大众评委int score[],评委打分。
score[i]的值表示第i个评委的打分【输出】无【返回】选手最终得分(取整)注:取整和四舍五入不同,取整只保留数值的整数部分,小数部分丢弃。
比如7.3和7.6,取整后都为7。
程序中所有计算后涉及小数的地方均只保留整数值∙示例输入: int n = 4int judge_type = {1,2,1,2}int score[] = {65, 85, 70, 90}输出:无返回:74其中:专业评委的评分:(65+70)/2 = 67(取整),67*60% = 40(取整)大众评委的评分:(85+90)/2 = 87(取整),87*40% = 34(取整)最终得分:40+34 = 74输入: int n = 3int judge_type = {1,1,1}int score[] = {65, 70, 75}输出:无返回:702.按要求排序(30分)∙问题描述:请编程实现将输入自然数组中的数字按要求处理并放入到输出数组中1、如果输入数字个数n为奇数,则将输入的最大数放到输出数组中间位置,然后从左到右按照从大到小顺序依次放置其他数2、如果输入数字个数n为偶数,则将输入的最大数放到输出数组中间靠右的位置,然后从左到右按照从大到小顺序依次放置其他数比如:输入数组input[] = {1,2,3,4,5},输出数组output[] = {2,4,5,3,1}输入数组input[] = {6,5,4,3,2,1},输出数组output[] = {1,3,5,6,4,2}∙要求实现函数:void my_sort(int n, int input[], int output[])【输入】int n,输入自然数个数int input[],输入自然数【输出】int output[],按要求排列好的输出数据【返回】无∙示例输入:int n = 5; int input[]={1,2,3,4,5}输出:output[]={2,4,5,3,1}输入:int n = 6; int input[]={6,5,4,3,2,1}输出:output[]={1,3,5,6,4,2}3.任务调度队列∙问题描述:在操作系统中,通常任务调度器会根据输入任务的优先级和状态,将输入任务放入到合适的任务队列中,等待执行。
请编写程序,实现该调度功能,具体要求如下1、任务分为系统任务和用户任务,调度器识别任务类型,分别放入系统任务列表和用户任务列表,无法识别的任务类型被忽略2、对于优先级高的任务,在任务队列中应该放入到优先级低的任务前面。
对于相同优先级的任务,则根据进入任务队列的顺序依次放置比如:输入:任务task[] = {1,30,155,100,230,300,25,30,100}输出:系统任务system_task[]={0,6,1,7,-1};用户任务user_task[]={3,8,2,4,-1}其中输入任务中task[5]=300,为非法任务,被忽略,其编号5不在输出中体现。