作业帮 > 综合 > 作业

1、编写程序,模拟约瑟夫环(josephus)问题:n个人(编号为1,2,3,……,n (n>0) )按顺时针方向围坐一

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 06:27:39
1、编写程序,模拟约瑟夫环(josephus)问题:n个人(编号为1,2,3,……,n (n>0) )按顺时针方向围坐一圈,每人持有一个正整数密码.开始时任意给出两个值:一个为首先报数的人的编号i (0
#include
#include
typedef struct Lnode{
int data;
struct Lnode *next;} Lnode;
Lnode* create(int n)
{//建立共有n个结点的单循环链表h
int i;
Lnode *h,*p;//p为当前新生成结点的指针
Lnode *r=(Lnode *)malloc(sizeof(Lnode));//r为尾指针
r->data=n;h=r;//h为头指针
for(i=n-1;i>0;i--)//头插法建立链表
{p=(Lnode *)malloc(sizeof(Lnode));
p->data=i;
p->next=h;
h=p;
}
r->next=h ; //形成环
return h;
}
void jeseph(Lnode *p,int m)
{//从约瑟夫环中输出出列人的编号
Lnode *q;
int j=0;
printf("出队序列为:\n");
do{
j++;
if (j==m-1)
{
q=p->next;
p->next=q->next;
printf("%d ",q->data);
j=0;free(q);
}
p=p->next;
}while(p->next!=p);
printf("%d\n",p->data);
free(p);
}
void main()
{
Lnode *h;
int m,n;
printf("\n请输入n和m的值:");
scanf("%d,%d",&n,&m);
h=create(n) ;
jeseph(h,m);
}
执行程序结果为:
请输入n和m的值:12 , 4
出队序列为:4,8,12,5,10,3,11,7,6,9,2,1
执行程序结果为:
请输入n和m的值:7,20
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个 新的 猴子选大王 代码 猴子选大王 功能:设编号为1,2,3,……,n的n(n>0)个猴子按顺时针方向围坐 /*3、约瑟夫问题约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到 设编号从1,2,...,n的n个人围坐一圈,约定编号为k(1 约瑟夫问题:n个骑士编号1,2,.,围坐圆桌旁找出最后留在圆桌旁的骑士编号(1)编 原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,……,n.从编号是1 的人开始报数 数据结构课程设计:设有n个人围坐在一个圆桌周围,编号为1,2,…,n.现在从第s个人开始逆序报数,即:第s个 C 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1— n),从第1号开始报数,一直数到m,数到m 约瑟夫环 已知n个人围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列,m是什么 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人 【遇到的问题】编写一个程序计算:1!+2!+…+100!(其中n!=1*2*3*…n)