约瑟夫环
来源:互联网 发布:淘宝优惠券链接微信 编辑:程序博客网 时间:2024/05/17 03:04
先看下定义:
有M个人围坐成一圈, 编号依次从1开始递增,现从编号为1的人开始报数,报到N的人出列,然后再从下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列。求出列次序。
不难看出,用循环链表可以比较容易的解决,代码如下。
#include<stdio.h>#include<malloc.h>typedef struct LinkList{int data;struct LinkList *next;}LinkList,*PLink;PLink CreateL(int n){PLink head = (PLink)malloc(sizeof(LinkList));PLink q = head,p;head->data = 1; for(int i = 2;i <= n;i++){PLink p = (PLink)malloc(sizeof(LinkList));q->next = p;p->data = i;q = p;}q->next = head;return head;} void ysfh(PLink head,int m,int n){PLink q = NULL;for(int i = 0;i < m;i++)//删m次就够了 {for(int j = 0;j < n-2;j++){head = head->next;}q = head->next;head->next = q->next;head = head->next;//每次让head指向下一次报数的起点 printf("%d ",q->data);free(q);}} int main(){int M,N;scanf("%d %d",&M,&N);PLink head = CreateL(M);ysfh(head,M,N);}整体来说代码没难度,熟悉下链表的操作。。。。
结果如下图:
0 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- win7中删除某一个服务
- Objective-C中NSValue的使用
- Android Handler机制
- 安装ggplot2
- 学习alert()和confirm()的区别
- 约瑟夫环
- 我的毕业设计-在线五子棋设计
- 计算几何 || 半平面交 (模板收集)
- svm理解
- 【浅谈ASP.NET】——WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping
- POJ2082---Terrible Sets(单调栈)
- 4--黑马程序员--技术总结之数组
- 【leetcode】Search for a Range
- 【java】贪吃蛇小游戏