平安喜乐,万事顺意!
一、选择题
1、关于子进程和父进程的说法,下面哪一个是正确的()
A、子选程被撤销时,其从属的父进程也被撤销
B、一个造程可以没有父进程或子进程
C、父进程被撤销时,其所有子进程也被相应撤消
D、一个父进程可以创建若干个子进程,一个子进程可以从属于若干个父进程
答案:C。一个父进程可以创建若干个子进程,一个子进程只能属于一个父进程。父进程被撤销时,其所有子进程也被相应撤消。
2、关于线程和进程,下面说法正确的是()
A、线程提高了不同执行程序间的通信效率
B、进程和线程都是资源分配和调度的基木单位
C、进程切换比同一进程内部的线程切换花费的时间少
D、终止上一个进程比终止一个线程花费的时间少
答案: A。分析:进程是资源分配和调度的基木单位,线程不是。进程切换比同一进程内部的线程切换花费的时间多,因为严格意义上线程是一个小进程。
3、整数Ox12345678,在采用bigendian中内存的排序序列是()
87 65 43 21
21 43 65 87
78 56 34 12
12 34 56 70
答案: C。分析:本题的考点是大端存储。
4、进程调度时,下列进程状态的变化过程哪一项是不可能发生的()
A、就绪挂起->阻塞挂起
B、阻塞挂起>就绪挂起
C、就绪挂起- →就绪
D、阻塞挂起->阻塞
答案:A。分析:
5、以下关于多线程的叙述错误的是:
A.线程同步的方法包括使用临界区,互斥量,信号量等
B.两个线程同时对简单类型全局变量进行写操作也需要互斥
C.实现可重入函数时,对自动变量也要用互斥量加以保护
D.可重入函数不可以调用不可重入函数
答案:C。分析:可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间。局部作用域变量,不需要互斥量。可重入函数对全局变量才需要互斥量保护。
编程题
1、反转部分单向链表
代码示例:
list_node*reverse_list(list_node*head, intL, intR) { //////在下面完成代码if(head==nullptr||R<L||L<1) returnhead; list_node*p=head; list_node*pre=nullptr;//list_node*pos=nullptr; intlen=0; while(p){ len++; pre= (len==L-1?p : pre); pos= (len==R+1?p : pos); p=p->next; } if(R>len) returnhead; list_node*node1= (pre==nullptr?head : pre->next); list_node*node2=node1->next; node1->next=pos; list_node*next=nullptr; while(node2!=pos){ next=node2->next; node2->next=node1; node1=node2; node2=next; } if(pre!=nullptr){ pre->next=node1; returnhead; } returnnode1; }
2、猴子分桃
分析题意:(1)开始时的总桃子数:X = 5^n - 4
(2)老猴子最后能得到的桃子数:n + (X+4)*(4/5)^n - 4 = n + 4^n - 4
因为老猴子能得到的桃子主要有两个来源:一是每个小猴子都要给一个,有 n 只小猴子,就可以得到 n 个;二是最后剩余的桃子都归老猴子所有,从上面最后一次的结果来看,一共剩余了 (X+4)*(4/5)^n 个桃子,但是这里面包括我们最早借给它们的 4 个,实际上剩余的桃子数为 (X+4)*(4/5)^n - 4 ,所以最后总共能得到的桃子数就是 n + (X+4)*(4/5)^n - 4 = 4^n + n - 4。
代码示例:
usingnamespacestd; intmain() { intn; while (cin>>n&&n!=0) { longlonga, b=0; longlongm=n; a= (long)pow(5, n) -4; longh=a; while (n--) { a-=1; a= (a/5) *4; } b=a+m; cout<<h<<" "<<b<<endl; } return0; }
总结
本文总共讲了5题牛客高频的选择题,以及两道牛客编程题,希望大家读后能够有所收获!