网易2018实习生招聘笔试题-ios开发实习生(13道)

1、若对如下无向图进行遍历,则下列序列中,不是广度优先遍历序列的是()
这里写图片描述
这里写图片描述

广度优先搜索其实就是从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。

其实也就是说广度优先搜索遍历图的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1、2、3等的顶点,所以上面最后一个还是访问g肯定是错的

2、一组记录的关键字为{15,14,1,10,17,53,68},用链地址法构造散列表,散列函数为H(key)=key MOD 13,则散列地址为1的链中有()个记录
这里写图片描述
3、以下哪种情况会使得进程由执行状态转变成阻塞状态

处于执行状态的进程因时间片用完或被高优先级进程剥夺运行权限,进程便进入就绪状态,等待调度程序为之再次分配处理机;当程序中出现地址越界或非法指令等错误而异常结束,进程将由执行状态进入终止状态;进程因等待某事件才能满足运行条件而无法执行,如请求临界资源,进程就会进入阻塞状态,通常有一个阻塞队列,等待被唤醒。

这里写图片描述

4、假设某分时系统采用时间片轮转法,进程A,B,C,D需要运行的时间分别为20ms,10ms,15ms,5ms,时间片选用5ms,则平均周转时间是:

时间片轮转的每次分配步骤 5 5 5 5 | 5 5 5 | 5 5 | 5 周转时间=等待时间+执行时间,所以就是A、B、C、D的周转时间分别为(50)+ (30) + (45) + (20),然后全部加起来除4就等于36.25ms

这里写图片描述

5、假设某系统为进程在内存中分配了3个物理块,进程访问顺序为0、2、1、3、0、2、4、0、2、1、3、4。已知系统未事先调入任何页面,那么当采用FIFO置换算法时,缺页率是:

缺页率 = 置换页的次数 / 要访问的总页数,如下所示是装载的页面,其中括号里面的代表的是缺页数,FIFO算法就是总是淘汰最先进入内存的页面

0 2 1 (3) | 3 2 1 (4) | 3 0 1 (5) | 3 0 2 (6) | 4 0 2 (7) | 4 1 2 (8) | 4 1 3 (9)

这里写图片描述

6、下列关于UDP通信的说法错误的是()

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。因为UDP没有确认机制,没有流量控制和拥塞控制,这样在网络出现拥塞或通信两端处理能力不匹配的时候,UDP并不会进行调整发送速率,所以就会导致大量丢包

这里写图片描述

7、下面关于进程和线程说法错误的是()

资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源,线程不持有资源只是抽象体系里头对线程概念的定义。 在系统中进程是拥有资源的一个独立单位,线程自己不拥有系统资源,但可以访问其隶属进程的资源。进程的系统开销比线程大,我们可以在一个线程当中去创建一个新线程,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线程发来的终止(取消)请求而强制终止。

这里写图片描述

8、有20个人去看电影,电影票50元。其中只有10个人有50元钱,另外10个人都只有一张面值100元的纸币,电影院没有其他钞票可以找零,问有多少种找零的方法?

卡特兰数问题,关于这个了解甚少就做一个基本介绍,其实这里如果用卡特兰数来做还得有一个条件就是且一人只买一张票,也就是说每一个有50块钱的人要先去付钱,然后再是拿着100块钱的人去付钱,然后这里我们看成是出栈和入栈操作,把出栈次序和进栈次序构成40个数字的序列,因为要进栈和出栈都算在这个序列里面,然后就可以用卡特兰数来求解了,我们这里可以直接用公式C(n,2n)/(n+1)=C(10,20)/11=16796,这个公式是卡特兰数的一般公式

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)h(0) (n>=2),也就是说,如果能把公式化成上面这种形式的数,就是卡特兰数,h(n)=C(2n,n)/(n+1),然后C(m,n) = m! / n!(m-n)!

这里写图片描述

9、已知中序遍历的序列为abcdef,高度最小的不可能的二叉树的前序遍历是

中序遍历可以看作是二叉树的投影。也就是说bcde可以作为父节点。因为高度最小,总结点6个。最小高度要求最多有三层。所以只能选择c和d作为根节点。选c做根节点,中序遍历是根左右,所以如果选择c为根节点,那么def位右子树,然后e就为根,因为最小高度为3,所以必须要满足e为根,d和f分别为左子树和右子树才可以,D显然不行

这里写图片描述

10、关于iOS常用组件UILabel以下说法错误的是:

设置userInteractionEnabled属性为yes就可以了

这里写图片描述

11、Objective-c表达式c = a ?: b等价于下面哪项表达式
这里写图片描述

12、小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。并且小Q对于能否被3整除这个性质很感兴趣。小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除
这里写图片描述

有一个规律就是各位数字之和能被3(或9)整除的数能被3(或9)整除,所以我们只需要从1到l-1的时候先去算出各个位数的数字之和,然后我们再去计算l到r的再进行统计,不过超时了,先看下这种算法

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cstdio>
#include <cstdlib>

using namespace std;;

int main(int argc, const char * argv[]) {

   //各位数字之和能被3(或9)整除的数能被3(或9)整除;
    long l,r;
    long sum = 0;
    long temp = 0;
    long count=0;

    scanf("%ld%ld",&l,&r);
    for (long i=1; i<l; i++) {

        temp=i;
        while (temp!=0) {
            sum+=temp%10;
            temp/=10;
        }
    }

    for (long i=l; i<=r; i++) {

        temp=i;
        while (temp!=0) {
            sum+=temp%10;
            temp/=10;
        }
        if(sum%3==0)
        {
            count++;
        }
    }
    printf("%ld",count);
    return 0;
}

这种题目其实还是有规律可以寻找的,我们可以来看下,其中从第一个到第四个当中有两个1,1代表的就是不能被3整除,然后从4到7当中也是不能有两个1,然后我们发现到i=4的时候就有了两个一,i=7的时候有了三个一,i=10的时候有了四个一,我们发现相差3就能增加一个1,以及下面是通过间隔两个0就有一个1,所以我们可以推出(x+2)/3其实就是从1开始到x的这个1、12、123等序列当中不能被整除的个数,然后我们要求的是[l,r],这样的话我们可以先计算出[1,l-1]的不满足被3整除的序列数量和[1,r]的不满足被3整除的序列数量,然后让r-l-1-([1,r]-[1,l-1]),就是[l,r]的序列当中能被整除的数量

i = 1 —- 1—-> 1

i = 2 —- 12—-> 0

i = 3 —- 123—-> 0

i = 4 —- 1234 —->1

i = 5 —- 12345 —->0

i = 6 —- 123456 —->0

i = 7 —- 1234567 —-> 1

i=8 —- 12345678 —-> 0

i=9 —- 123456789 —-> 0

i=10 —- 123456789 —-> 1

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cstdio>
#include <cstdlib>

using namespace std;;
//计算规律的函数
long f(long x)
{
    return (x+2)/3;
}
int main(int argc, const char * argv[]) {

   //各位数字之和能被3(或9)整除的数能被3(或9)整除;

    long l,r;

    long count=0;

    scanf("%ld%ld",&l,&r);

    count = r-l+1-(f(r)-f(l-1));

    printf("%ld\n",count);

    return 0;
}

13、牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他

这道题其实就是if、else判断就好了

这里写图片描述

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cstdio>
#include <cstdlib>

using namespace std;;


int main(int argc, const char * argv[]) {

    int N;
    scanf("%d\n",&N);
    char  s[N];
    //设置初始化方向为N也就是北方
    char direction='N';
    //输入字符串
    scanf("%s",s);
    //遍历字符串
    for (int i=0; i<N; i++) {

        if(s[i]=='L'&&direction=='N')
        {
            direction='W';
        }
        else if(s[i]=='R'&&direction=='N')
        {
            direction='E';
        }
        else if(s[i]=='L'&&direction=='W')
        {
            direction='S';
        }
        else if(s[i]=='R'&&direction=='W')
        {
            direction='N';
        }
        else if(s[i]=='L'&&direction=='E')
        {
            direction='N';
        }
        else if(s[i]=='R'&&direction=='E')
        {
            direction='S';
        }
        else if(s[i]=='L'&&direction=='S')
        {
            direction='E';
        }
        else if(s[i]=='R'&&direction=='S')
        {
            direction='W';
        }
    }
    printf("%c\n",direction);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80754480