60分钟,30道单选+5道多选+若干填空+1道编程。
1、约瑟夫环问题
摘自百度:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
思路:题目要求用链表解决,但是却没有给出函数原型,所以我自己采用的是int func(ListNode* head, int n, int k, int m),约瑟夫环是一个很简单的问题,应该不用多解释了。
class ListNode{
public:
int val;
ListNode* next;
ListNode(int v=0):val(v),next(nullptr){};
};
int func(ListNode* head, int n, int k, int m){
while(--k){
head=head->next;
}
int count=1;
while(n!=1){
ListNode* temp=head;
head=head->next;
count++;
if(count==m){
temp->next=head->next;
head=temp->next;
count=1;
n--;
}
}
return head->val;
}
其实之前还有面过一家,只不过因为时间太久远了所以不记得题目了。。。面试也挂在了HR面,难过TAT