约瑟夫环
来源:互联网 发布:怎么看自己的mac 编辑:程序博客网 时间:2024/04/24 12:57
数据结构上机作业,约瑟夫环问题
编号为1,2,3.......n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值 ,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止.试设计一个程序,求出列顺序.
利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号.
例如m的初值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,出列顺序为6,1,4,7,2,3,5.
我的C程序如下:
#include<stdio.h>
typedef struct node
{
int data;
int number;
struct node *next;
}Node,*LinkList;
LinkList CreateJoseph(int n)
{
int i=1;
Node *p,*r;
LinkList L=NULL;
L->next=NULL;
if(n<1) exit(0);
for(i=1;i<=n;i++)
{
r=(Node*)malloc(sizeof(Node));
printf("/n please input %d'password:",i);
scanf("%d",&r->data);
r->number=i;
if(i==1)
{
L=r;
p=r;
}
else
{
p->next=r;
p=r;
}
}
p->next=L;
return L;
}
void DestoryJoseph(LinkList L,int m)
{
Node *p,*q;
int j=1;
printf("/n Sequence:");
p=L;
while(p->next!=p)
{
while(j!=m-1)
{
p=p->next;
j++;
}
q=p->next;
p->next=p->next->next;
printf("%d",q->number);
m=q->data;
free(q);
j=0;
}
printf("%d",p->number);
free(p);
getch();
}
int main()
{
int n,m;
LinkList L;
printf("total number of the Joseph ring :");
scanf("%d",&n);
L=CreateJoseph(n);
printf("/n initial the up-limit m:/n");
scanf("%d",&m);
DestoryJoseph(L,m);
}
没有用头结点,反而更方便些.
编号为1,2,3.......n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值 ,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止.试设计一个程序,求出列顺序.
利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号.
例如m的初值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,出列顺序为6,1,4,7,2,3,5.
我的C程序如下:
#include<stdio.h>
typedef struct node
{
int data;
int number;
struct node *next;
}Node,*LinkList;
LinkList CreateJoseph(int n)
{
int i=1;
Node *p,*r;
LinkList L=NULL;
L->next=NULL;
if(n<1) exit(0);
for(i=1;i<=n;i++)
{
r=(Node*)malloc(sizeof(Node));
printf("/n please input %d'password:",i);
scanf("%d",&r->data);
r->number=i;
if(i==1)
{
L=r;
p=r;
}
else
{
p->next=r;
p=r;
}
}
p->next=L;
return L;
}
void DestoryJoseph(LinkList L,int m)
{
Node *p,*q;
int j=1;
printf("/n Sequence:");
p=L;
while(p->next!=p)
{
while(j!=m-1)
{
p=p->next;
j++;
}
q=p->next;
p->next=p->next->next;
printf("%d",q->number);
m=q->data;
free(q);
j=0;
}
printf("%d",p->number);
free(p);
getch();
}
int main()
{
int n,m;
LinkList L;
printf("total number of the Joseph ring :");
scanf("%d",&n);
L=CreateJoseph(n);
printf("/n initial the up-limit m:/n");
scanf("%d",&m);
DestoryJoseph(L,m);
}
没有用头结点,反而更方便些.
- 约瑟夫问题、约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- ASP读取表的字段名称及字段数目
- vc6.0下简单使用CTreeCtrl (转自http://www.cnblogs.com/sunnyjones/)
- Oracle真的要收购BEA了--这次解雇的会是哪个团队
- Struts2拦截器
- 字符串hash算法比较
- 约瑟夫环
- 缓存技术详谈—PHP缓存技术
- 在MFC中应用CTreeCtrl控件的技巧(http://www.sqlsky.com/vc/070802/20055/)
- 基于英文单词的快速HASH索引算法
- 目录,文件操作详谈—php
- linux下apache.tomcat.mysql的整和(1)
- linux内核netfilter连接跟踪的hash算法
- ASP的XML缓存类,代替了Application
- 一个HASH算法的设计