利用循环链表(单链)实现Josephus环(某公司校园招聘笔试试题)
2012-10-25 19:03
323 查看
#include<iostream> using namespace std; typedef struct node { int data; struct node *next; }Node; Node *createRing(int n) { Node *p = new Node ; //批量生成结点 int i; for(i = 0; i < n; i++) { p[i].data = i + 1; p[i].next = &p[(i + 1) % n]; } return p; } Node *move(Node *p, int gap) //以p为第一个,定位到第gap个 { int i; for(i = 0; i < gap - 1; i++) p = p->next; return p; } int main() { int total, start, gap; cin >> total >> start >> gap; Node *p = createRing(total); Node *pNow = move(p, start); //初始位置 Node *p1, *p2; int i; for(i = 0; i < total -1; i++) // n-1次脱链 { p1 = move(pNow, gap - 1); p2 = p1->next; pNow = p2->next; p1->next = p2->next;//脱链 cout << p2->data << " "; } cout << pNow->data << endl; delete [] p; return 0; }
输入:10 3 4
结果为:
10 3 4
6 10 4 9 5 2 1 3 8 7
相关文章推荐
- 如何判断两个矩形是否有重叠部分?(某公司校园招聘笔试试题)
- 判断表达式中括号是否匹配(栈的典型应用)(某公司校园招聘笔试试题)
- 并查集的简介及其C/C++代码的实现(某公司招聘笔试试题)
- 求数组中n-1个元素的乘积的最大值(某公司2007年校园招聘笔试试题)
- delete p 究竟把p怎么了?(某公司校园招聘笔试试题)
- A升杯子和B升的杯子如何倒出C升的水?(某公司校园招聘笔试试题,某另外公司校园招聘笔试试题)
- 利用SQL语句查找姓“张”且分数大于80的记录(某公司招聘笔试试题)
- 求正整数数组构成的最小数(某公司2013年校园招聘笔试试题)
- 单链表的就地逆置 (单链表带头结点)(某公司校园招聘面试试题)
- 完全二叉树叶子节点数n0和总结点数N的关系 (某公司校园招聘笔试试题)
- 利用递归求阶乘(某公司校园招聘笔试题目)
- 如何判断两个矩形是否有重叠部分?(某公司校园招聘笔试试题)
- 骇人听闻的二分查找(某公司校园招聘笔试试题)(据说只有10%的程序员可以写出没有bug的二分查找)
- 微软2014校园招聘笔试试题
- 各大IT公司2012校园招聘笔试面试整理--解题报告整理
- 详解华为笔试试题之双向循环链表题
- 利用 双向循环链表 实现通讯录的功能
- 任务调度时间 (某公司实习生招聘笔试试题)
- 微软2014校园招聘笔试试题及答案分析
- 各大IT公司2012校园招聘笔试面试整理