设为首页 加入收藏

TOP

2011年华为软件校园招聘编程测验 类别:软件C/C++语言【2】
2014-11-20 11:27:51 来源: 作者: 【 】 浏览:27
Tags: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 = 4


int 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 = 3


int judge_type = {1,1,1}


int score[] = {65, 70, 75}


输出:无


返回:70



2.按要求排序(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不在输出中体现。


void scheduler(int n, int task[], int system_task[], int user_task[])


【输入】 int n,输入任务数目,总数目不超过255(n<=255)


int task [],下标表示输入任务编号(从0开始),值为任务的优先级,值越小优先级越高。规定优先级范围为0~255,其中优先级小于50的为系统任务,大于等于50的为用户任务。超过优先级范围的为无法识别的任务(非法任务,调度器应该忽略该任务)。


【输出】 int system_task[],按优先级顺序放置的系统任务编号。其值为任务编号,优先级高的任务在前,优先级低的任务在后。放置完最后一个任务后,用-1表示任务放置结束


int user_task[],按优先级顺序放置的用户任务编号。其值为任务编号,优先级高的任务在前,优先级低的任务在后。放置完最后一个任务后,用-1表示任务放置结束


【返回】 无


输入: int n = 9; int task[] = {1,30,155,100,230,300,25,30,100}


输出: int system_task[]={0,6,1,7,-1}


int user_task[]={3,8,2,4,-1}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇止步腾讯2面 收拾心情重新朝TA启程 下一篇一份ORACLE DBA面试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: