约瑟夫环 c语言

约瑟夫环 c语言,第1张

约瑟夫环问题的源程序如下:

#include "stdio.h"

#include "stdlib.h"

typedef struct node

{ int data

struct node *next

}JD

JD *xhlbjl(JD *front, JD *rear,int n)

{ /*建立循环队列*/

int i

front=(JD *)malloc(sizeof(JD))

front->data=n/*头指针指向n号*/

front->next=front

for (i=n-1i>0i--)

{ rear=(JD *)malloc(sizeof(JD))

rear->data=i

rear->next=front->next

front->next=rear

}

return(front)

}

JD *outqueue(JD *front, JD *rear,int m) /*出队列*/

{int i,s

for (i=0i<s-1i++)

front=front->next

return(front)

}

main()

{ JD *h,*p,*q,*s

int i,j,m,n

printf("请输入人数 ")

scanf("%d",&n)

h=xhlbjl( p,q,n)

p=h->next

printf("坐成一圈的人是: ")

for(i=1i<=ni++)

{ printf("%3d",p->data)

p=p->next

}

printf("\n请渗扰输举好入开始位置 ")

scanf("%d",&s)

printf("数几个出去 ")

scanf("%d",&m)

s=outqueue(p,q,m)

q=s

p=s->next

for(j=0j<nj++)

{ for (i=1i<mi++)

{ q=p

p=p->next

}

printf("\n出列丛答旦的人是第 %d 号",p->data)

q->next=p->next

free(p)

p=q->next

}

}

http://zhidao.baidu.com/question/14741820.html?si=1

#include<stdio.h>

struct

list//建立一个结构体,慧带岁包括每个人的编号,密码和下一级的指针

{

int

id

int

code

struct

list

*next

}

typedef

struct

list

list//把结构体用list表示

list*

input(int

n)//链表的初始化

{

list

*p,*q,*l

int

i,m

p=new

list

l=new

list

l->next=NULL

p=l

p->id=1//第一个人的初始化

scanf("%d",&m)

p->code=m

for(i=2i<=ni++)//第二个人到第num个人的初始化

{

q=new

list

q->id=i

scanf("%d",&m)

q->code=m

q->next=NULL

p->next=q

p=q

}

p->next=l//使表尾指向表头,成循环链表

return

p

}

int

main()

{

int

num,m1,i

list

*q,*p

while(scanf("%d",&num)!=EOF)

{

printf("第一次的密码为:")

scanf("%d",&m1)

p=input(num)

//printf("%4d\n",head->id)

printf("出队的顺序为:")

while(p->next!=p)

{

for(i=1i<=m1i++)

{

q=p

p=p->next

//printf("--\n"前睁,p->id)

}

m1=p->code

printf("%4d",p->行前id)

q->next=p->next

delete

p

p=q

}

printf("%4d",p->id)

delete

p

printf("\n")

}

}

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int main()

{

int x,i=0,c=0,y,left=0,*arr

printf("x和y:")

scanf("%d %d",&x,&y)

y++

arr=(int*)calloc(x,sizeof(int))

memset(arr,0,x*sizeof(int))

while(left<x)

{

if(0==arr[i])

c++

if(y==c)

{

arr[i]=1

left++

//不需要打印切掉的西瓜的编号的话,

//注释掉这句

printf("%d ",i+1)

if(left==x)

printf("知唤\搭升凯n最后留下笑亩来的西瓜的编号是:%d",i+1)

c=0

}

if(++i==x)

i=0

}

free(arr)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12376961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存