数据结构设计约瑟夫环问题

 我来答
Iueqha
2011-10-07
知道答主
回答量:50
采纳率:0%
帮助的人:23万
展开全部
问题描述:joseph环问题的一种描述是:编号为1,2,3,···,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序求出出列顺序。
基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号
测试数据:m的初始值为20;n=7,7个人的密码依次为3,1,7,2,4,8,4,首先m值为6

# 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;

}
这是我之前做的大作业,望采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
景联文科技
2024-06-11 广告
杭州景联文科技有限公司专注于大模型数据集的研发与应用。我们深知,在人工智能飞速发展的时代,数据是驱动模型优化的核心动力。因此,我们致力于构建丰富、多元的大模型数据集,涵盖各行各业,为AI模型提供充足的“养分”。通过不断积累与优化,我们的数据... 点击进入详情页
本回答由景联文科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式