解题思路:建立双向循环链表,每个结点保存一个人的序号,当被点到时删除结点并重新连接左右两个结点,直到剩下最后一个结点为止。
注意事项:算法的时间复杂度和空间复杂度很高,很容易超过时间限制。
参考代码:
#include <iostream> using namespace std; typedef struct Lnode { int data; struct Lnode *front, * next; } LNode, * PNode; PNode init(int n); //初始化链表 void flows(PNode p, int m); //运行流程 int main() { int n; cin>>n; PNode L = init(n); flows(L, 3); return 0; } PNode init(int n) { PNode L = new LNode; L->data = 1; PNode p = L; p->next = NULL; p->front = NULL; for(int i = 2; i <= n; ++i) { PNode r = new LNode; r->data = i; p->next = r; r->front = p; p = r; p->next = NULL; } p->next = L; L->front = p; return L; } void flows(PNode p, int m) { while(p->front != p) { for(int i = 1; i < m; ++i) { p = p->next; } p->front->next = p->next; p->next->front = p->front; PNode r = p; p = p->next; delete r; } cout<<p->data; delete p; }
0.0分
2 人评分
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:530 |
printf基础练习2 (C语言代码)浏览:690 |
三角形 (C++代码)递推浏览:825 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:751 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:583 |
母牛的故事 (C语言代码)浏览:594 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
1017题解浏览:663 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:627 |
整数平均值 (C语言代码)浏览:856 |