约瑟夫环问题 设计一个带头结点的循环单链表类,实现约瑟夫环问题; 问题描述:设编号为1,2,…,n(n>0)个 10

约瑟夫环问题设计一个带头结点的循环单链表类,实现约瑟夫环问题;问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。开始时任意给出一... 约瑟夫环问题
设计一个带头结点的循环单链表类,实现约瑟夫环问题;
问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m从第一个人开始顺时针方向自1起顺序报数。报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数.如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,并给出出列人的编号序列。
测试数据:
n=7,7个人的密码依次为3,1,7,2,4,8,4
初始报数上限值m=20
用C++
展开
 我来答
Iueqha
2011-01-19
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
# include <stdio.h>

# define SIZE 20

int joseph(int a[],int m,int n)

{

int b[SIZE];

int i;

int flag=0;

int code;

int sum=n;

int point=0;

int num=m;

for(i=0;i<n;i++)

{ b[i]=i+1; }

while(sum!=0)

{

for(i=1;i<=num;i++)

{ if(point>=sum) point=1;

else point++;

}

num=a[point-1];

code=b[point-1];

for(i=point;i<=sum;i++)

{ a[i-1]=a[i];

b[i-1]=b[i];

}

sum--;

flag++;

point--;

printf("已退出%d人,退出的人的编号为%d.\n",flag,code);

}

return 0;

}

main()

{

int m,n,i;

int array[SIZE];

printf("约瑟夫环求解,当前设置最大人数为%d.\n",SIZE);

printf("报数上限:\n");

scanf("%d",&m);

printf("总人数为:\n");

scanf("%d",&n);

for(i=0;i<n;i++)

{

printf("第%d人的密码为:",i+1);

scanf("%d",&array[i]);

}

joseph(array, m, n) ;

return 0;

}

我用的是C语言,已经运行过没有问题。望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zkgogogo
2011-01-10
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
用指针实现的循环单链表。
#include <iostream>
using namespace std;

struct Node
{
int m,num;//m是密码,num是他的编号
Node *next;
};

Node *head;
int M,N;

void Build()
{
cin>>N>>M;
Node *p=head;
for(int i=1;i<=N;i++)
{
Node *tmp=new Node;
cin>>tmp->m;
tmp->num=i;
if(i==1)head=p=tmp;
else p->next=tmp;
p=tmp;
}
p->next=head;
}

Node* Move(int step,Node* from)
{
Node *p=from;
for(int i=0;i<step;i++)
p=p->next;
return p;
}

void GO()
{
Node *p=head;
int step=M-1;
for(int i=1;i<N;i++)
{
p=Move(step-1,p);
step=p->next->m;
cout<<p->next->num<<endl;
p->next=p->next->next;
}
cout<<p->num<<endl;
}

int main()
{
Build();
GO();
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式