GESP C++ 真题 · 逐题精解
首页C++五级真题 › 2025年6月 › 第4题

GESP 2025年6月 C++五级 单选题 第4题

C++五级单选题2025年6月第4题

所属知识点:链表 难度要求:掌握 考频:—

下列C++代码 循环链表解决约瑟夫问题,即假设 n 个 围成 圈,从第 个 开始数,每次数到第 k 个 用 人 一 一 人 的 就出圈,输出最后留下的那个 的编号。横线上应填写( )。 人 人
struct Node {
int data;
Node* next;
};
Node* createCircularList(int n) {
Node* head = new Node{1, nullptr};
Node* prev = head;
for (int i = 2; i <= n; ++i) {
Node* node = new Node{i, nullptr};
prev->next = node;
prev = node;
}
prev->next = head;
return head;
}
int fingLastSurvival(int n, int k) {
Node* head = createCircularList(n);
Node* p = head;
Node* prev = nullptr;
while (p->next != p) {
for (int count = 1; count < k; ++count) {
prev = p;
p = p->next;
}
_______________________
}
cout << "最后留下的人编号是: " << p->data << endl;
delete p;
return 0;
}

正确答案:A

题目解析

约瑟夫出圈:先 prev->next=p->next 摘除,再 delete………

完整解析为会员内容二级及以上的逐题精讲需开通 VIP。一级解析全部免费。前往 GESPPASS 解锁

想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?

进入 GESPPASS 开始练习