华为od 研发岗一手笔试题

今天是12.5

前言

第一次投华为:
很早之前就有个华为的人联系我投递,去华为系统投递的,然后说要给我发笔试。不过现在我的投递档案还在华为的系统里挂着。后续就把我鸽了(跟我说是因为政策原因不招了,反正我是不太信,在那沐浴更衣干等了一天,有时候实在是不要报太大的期望)。
第二次投华为:
然后又过了一两周在牛客上hr看了我的简历就跟我说周三给我发笔试链接,结果说忘记了还是咋的,周五给我发,因为被鸽过一次了我就没有什么期待。到下午了邮件发到了:
华为od 研发岗一手笔试题_第1张图片下面的正文有个确认参加,有效时间是7天内。然后我今天做了这个题跟大家一起分享一下。

(个人感觉第一次是华为招的正式员工把我简历刷了,第二个是华为od,不懂的同学可以去查一查有啥区别,不过od一般也能给到20k+起步)

以下是题目正文(个人回忆的,尽量贴近题目意思):
总分:400分

第一题:(100分) 求数组

给两个数字,第一个是总数n,第二个是划成多少分k,也就是把一个正整数分割成一个递增1的数组。如果划分不了就输出-1。

输入样例1:15 5
    输出:1 2 3 4 5

输入样例2:  3 5
	输出: -1

我对于这个题目的解法大概就是分组讨论,先把n

  1. 奇数直接拿n/k能得到中间的数字,然后推出来一个式子:(要满足着个式子大于0才能找到目标数组)

    n/k - k/2 + i
    

    就可以输出目标数组(i从0开始到k-1)

  2. 对偶数的处理复杂一点,我是用了一个变量temp来存n(浮点数)的值。如果temp/k == n/k+0.5 那么认为这个数是可以划分为这么多组的,同时还要满足以下的递推式>0。

    n/k - k/2 + i
    

    就可以输出目标数组(i从1开始到k)

然后第一题还有坑,我第一次只过了95%。后来写了个样例 1 1居然输出个-1,特判一下就A了。

第二题 (100分)设计流水线

模拟短进程优先算法,题目会给出拥有的线程数n,任务数m, 以及每个任务需要的时间,要求模拟短进程优先算法求最后的运行时间。

输入: 3 5
	  3 2 4 1 5
输出: 7
说明:先把耗时1 2 3的进程分别分配给1 2 3号线程,然后一个单位时间之后线程1闲置,把当前最短的
任务4放入1号线程运行,然后又一个单位时间过去,把当前最短的任务耗时5的进程给线程2运行。最终耗
时取的是2号线程的总运行时间。

华为od 研发岗一手笔试题_第2张图片
解题思路:。。。。。。。。。。。。很无语的事情,sort不能用,然后我自己手写了个快排,因为数据量不大所以比较放肆。然后就开了个数组模拟了一下各个线程的运行时间,从小到达排列任务需要的时间,依次取,找到已运行时间最短的进程就把当前进程的时间加上去。
but 我只过了85%的测试点。

第三题:网络广播 (200分)

给出一个NXN的矩阵(网络中各个路由器的链接关系)求通知到该网络的所有路由器需要多少次广播。

输入:1 0 0
	 0 1 0
	 0 0 1
输出:3

输入:1 1
     1 1
输出:1

这个题输入输出的处理就很烦人,我是用getline把第一行直接取了,分奇偶讨论出N,后面用的cin来取的每一个元素。说白了这就是个并查集的问题。最后因为自己很久没碰过并查集了,写的很复杂。只拿了65%的测试点。

以上是我整理出来的刷题经验,如有纰漏还请大家指正。

你可能感兴趣的:(机考真题经验,模拟,数组,笔试经验,华为od,机考真题)