积极推进在线网站建设,如何用网站做课件,装修案例分析,网站 php .net### 思路 1. 创建一个循环链表表示围成一圈的 n 个人。 2. 从第一个人开始报数#xff0c;每报到 3 的人退出圈子。 3. 重复上述过程#xff0c;直到只剩下一个人。 4. 输出最后留下的人的编号。
### 伪代码 1. 创建一个循环链表#xff0c;节点表示每个人的编号。 2. 初始…
### 思路 1. 创建一个循环链表表示围成一圈的 n 个人。 2. 从第一个人开始报数每报到 3 的人退出圈子。 3. 重复上述过程直到只剩下一个人。 4. 输出最后留下的人的编号。
### 伪代码 1. 创建一个循环链表节点表示每个人的编号。 2. 初始化当前节点为第一个人。 3. 循环直到链表中只剩下一个节点 - 报数到 3 时删除当前节点。 - 移动到下一个节点。 4. 输出最后剩下的节点的编号。
### C代码
#include iostream
using namespace std;struct Node {int data;Node* next;Node(int val) : data(val), next(nullptr) {}
};int findLastPerson(int n) {// 创建循环链表Node* head new Node(1);Node* prev head;for (int i 2; i n; i) {prev-next new Node(i);prev prev-next;}prev-next head; // 形成循环链表Node* current head;Node* previous prev;while (current-next ! current) {// 报数到3删除当前节点for (int i 1; i 3; i) {previous current;current current-next;}previous-next current-next;delete current;current previous-next;}int lastPerson current-data;delete current;return lastPerson;
}int main() {int n;cin n;cout findLastPerson(n) endl;return 0;
}