约瑟夫环---单向循环链表
2016-08-22 14:18
507 查看
题目:实现一个围圈报数的小函数,7个人围一圈,从第1个人开始报数,报道3的人结束游戏,计算出最后剩下一个人的时候,他是第几个人。
代码:
默认从第一个人开始报数
设定从第N个人开始报数
代码:
默认从第一个人开始报数
#include<iostream> using namespace std; struct Lnode{ int data; Lnode * next; }; int Cyclecountoff(int people, int num){ Lnode *head,* pnode, *prepnode=NULL, *curr = NULL; head = pnode = new Lnode; pnode->data = 1; pnode->next = pnode; curr = pnode; for (int i = 2; i <= people; i++){ Lnode* tmp = new Lnode; tmp->data = i; tmp->next =curr->next; curr->next = tmp; curr = tmp; } prepnode = curr; while (people--){ for (int s = 1; s < num; s++){ prepnode = pnode; pnode = pnode->next; } prepnode->next = pnode->next; printf("删除的第一个元素%d\n", pnode->data); pnode = prepnode->next; } return 0; } int main(){ Cyclecountoff(7,3); system("pause"); }
设定从第N个人开始报数
#include<iostream> using namespace std; struct Lnode{ int data; Lnode * next; }; int Cyclecountoff(int people, int N, int num){ Lnode *head,* pnode, *prepnode=NULL, *curr = NULL; head = pnode = new Lnode; pnode->data = 1; pnode->next = pnode; curr = pnode; for (int i = 2; i <= people; i++){ Lnode* tmp = new Lnode; tmp->data = i; tmp->next =curr->next; curr->next = tmp; curr = tmp; } prepnode = curr; for (int j = 1; j < N; j++){ prepnode = pnode; pnode = pnode->next; } while (people--){ for (int s = 1; s < num; s++){ prepnode = pnode; pnode = pnode->next; } prepnode->next = pnode->next; printf("删除的第一个元素%d\n", pnode->data); pnode = prepnode->next; } return 0; } int main(){ Cyclecountoff(7,2,3); system("pause"); }
相关文章推荐
- 用单向循环链表存储结构模拟约瑟夫环(C++)
- 单向循环链表的实现以及约瑟夫环的实现
- 用单向循环链表实现约瑟夫环
- 单向循环链表--约瑟夫环
- java单向循环链表实现约瑟夫环
- 约瑟夫环(用单向循环链表解决)
- 约瑟夫环-单向循环链表
- 单向循环链表求解约瑟夫环
- 数据结构:循环单向链表——约瑟夫环
- 单向循环链表实现约瑟夫环
- [转]用单向循环链表解决约瑟夫环问题
- 用单向循环链表解决约瑟夫环(Joseph)问题
- PHP数据结构与算法:单向循环链表
- 非循环单向链表-增删改查排-释放
- 循环链表解约瑟夫环
- c语言实现--单向循环链表操作
- 大话数据结构(三)——单向循环链表的java实现
- 一步一步写算法(之循环单向链表)
- 有一个单向循环链表,从头开始报数,报到m或者m的倍数的元素出队。根据出队的先后顺序再组成一个单向循环链表。
- 不带表头节点的循环单向链表