如何用JAVA实现约瑟夫环问题?急! 30
我们要课程设计:题目就是上面的用JAVA实现约瑟夫环问题。实验要求:约瑟夫环(n个人围成一圈,从第k个人开始计数(1,2,3,…)。数到m的人出圈,再重新计数,……设计完...
我们要课程设计:题目就是上面的用JAVA实现约瑟夫环问题。
实验要求:
约瑟夫环(n个人围成一圈,从第k个人开始计数(1,2,3,…)。数到m的人出圈,再重新计数,……设计完成当给定n,k,m时,n个人的出圈的顺序)
1)n,k,m由用户输入,人的个数限制在15个以内。
2)分别使用顺序表和链接表完成。
3)对输入的数据有纠错处理。
还请热心人帮个忙啊!谢谢啦!! 展开
实验要求:
约瑟夫环(n个人围成一圈,从第k个人开始计数(1,2,3,…)。数到m的人出圈,再重新计数,……设计完成当给定n,k,m时,n个人的出圈的顺序)
1)n,k,m由用户输入,人的个数限制在15个以内。
2)分别使用顺序表和链接表完成。
3)对输入的数据有纠错处理。
还请热心人帮个忙啊!谢谢啦!! 展开
1个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int number;
int mima;
struct node * next;
}Node, *Link;
Link Init(void)
{
Link L;
L = (Link)malloc(sizeof(Node));
L->next = L;
return L;
}
void Insert(Link L, int e_mima, int e_number)
{
Link p,q;
p = (Link)malloc(sizeof(Node));
p->mima = e_mima;
p->number = e_number;
q = L;
while(q->next != L)q = q->next;
p->next = q->next;
q->next = p;
}
void Delete(Link L, int i)
{
Link p,q;
q = L;
while(q->next != q && q->next->number != i)
q = q->next;
if(q->next->number == i)
{
p = q->next;
q->next = p->next;
free(p);
}
}
void main()
{
Link p,q,L;
int i,m,n,mima;
printf("请输入人数和初始密码:");
scanf("%d%d",&n,&m);
if(n<=0 || m<=0)return;
L = Init();
i=1;
while(i<=n)
{
printf("请输入第 %d 个人的密码:",i);
scanf("%d",&mima);
if(mima <= 0)continue;
Insert(L, mima, i);
i++;
}
i = 1;
p = L->next;
while(L->next != L)
{
q = p;
p = p->next;
if(p ==L)
{
q = p;
p = p->next;
}
i++;
if(i == m)
{
printf("%d\t",p->number);
m = p->mima;
Delete(L, p->number);
p = q;
i = 0;
}
}
}
#include <stdlib.h>
typedef struct node
{
int number;
int mima;
struct node * next;
}Node, *Link;
Link Init(void)
{
Link L;
L = (Link)malloc(sizeof(Node));
L->next = L;
return L;
}
void Insert(Link L, int e_mima, int e_number)
{
Link p,q;
p = (Link)malloc(sizeof(Node));
p->mima = e_mima;
p->number = e_number;
q = L;
while(q->next != L)q = q->next;
p->next = q->next;
q->next = p;
}
void Delete(Link L, int i)
{
Link p,q;
q = L;
while(q->next != q && q->next->number != i)
q = q->next;
if(q->next->number == i)
{
p = q->next;
q->next = p->next;
free(p);
}
}
void main()
{
Link p,q,L;
int i,m,n,mima;
printf("请输入人数和初始密码:");
scanf("%d%d",&n,&m);
if(n<=0 || m<=0)return;
L = Init();
i=1;
while(i<=n)
{
printf("请输入第 %d 个人的密码:",i);
scanf("%d",&mima);
if(mima <= 0)continue;
Insert(L, mima, i);
i++;
}
i = 1;
p = L->next;
while(L->next != L)
{
q = p;
p = p->next;
if(p ==L)
{
q = p;
p = p->next;
}
i++;
if(i == m)
{
printf("%d\t",p->number);
m = p->mima;
Delete(L, p->number);
p = q;
i = 0;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询