早教吧作业答案频道 -->其他-->
约瑟夫环问题解答。需要算法和数据结构1.约瑟夫环问题[问题描述]设有n个人围坐一圈,现从第s个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列。
题目详情
约瑟夫环问题解答。
需要算法和数据结构
1.约瑟夫环问题
[问题描述] 设有n个人围坐一圈,现从第s个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列。如此下去,直到所有人都出列为止。试设计确定他们出列次序序列的程序。
[基本要求] 选择单向循环链表作为存储结构模拟整个过程,并依次输出出列的各人的编号。
[实现提示] 此题中循环链表可不设头结点,而且必须注意空表和“非空表”的界限。如:n=8,m=4时,若从第一个人开始报数,设每个人的编号依次为1,2,3,…开始报数,则得到的出列次序为4 8 5 2 1 3 7 6,如下图所示,内层数字表示人的编号,每个编号外层的数字代表人出列的序号。
需要算法和数据结构
1.约瑟夫环问题
[问题描述] 设有n个人围坐一圈,现从第s个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列。如此下去,直到所有人都出列为止。试设计确定他们出列次序序列的程序。
[基本要求] 选择单向循环链表作为存储结构模拟整个过程,并依次输出出列的各人的编号。
[实现提示] 此题中循环链表可不设头结点,而且必须注意空表和“非空表”的界限。如:n=8,m=4时,若从第一个人开始报数,设每个人的编号依次为1,2,3,…开始报数,则得到的出列次序为4 8 5 2 1 3 7 6,如下图所示,内层数字表示人的编号,每个编号外层的数字代表人出列的序号。
▼优质解答
答案和解析
#define N 100
int yuesefu1(int data[],int sum,int k)
{
int i=0,j=0,count=0;
while(count {
if(data[i]!=0)/*当前人在圈子里*/
j++;
if(j==k)/*若该人应该退出圈子*/
{
data[i]=0;/*0表示不在圈子里*/
count++;/*退出的人数加1*/
j=0;/*重新数数*/
}
i++;/*判断下一个人*/
if(i==sum)/*围成一圈*/
i=0;
}
for(i=0;i if(data[i]!=0)
return data[i];/*返回最后一个人的编号*/
}
void main()
{
int data[N];
int i,j,total,k;
printf("\nPlease input the number of every people.\n");
for(i=0;i {
int input;
scanf("%d",&input);
if(input==0)
break;/*0表示输入结束*/
for(j=0;jif(data[j]==input)
break;
if(j>=i&&input>0)/*无重复,记录编号,继续输入*/
{
data[i]=input;
i++;
}
else
printf("\nData error.Re-input:");
}
total=i;
printf("\nYou have input:\n");
for(i=0;i {
if(i%10==0)
printf("\n");
printf("%4d",data[i]);
}
printf("\nPlease input a number to count:");
scanf("%d",&k);
printf("\nThe last one's number is %d",yuesefu1(data,total,k));
}
.
int yuesefu1(int data[],int sum,int k)
{
int i=0,j=0,count=0;
while(count
if(data[i]!=0)/*当前人在圈子里*/
j++;
if(j==k)/*若该人应该退出圈子*/
{
data[i]=0;/*0表示不在圈子里*/
count++;/*退出的人数加1*/
j=0;/*重新数数*/
}
i++;/*判断下一个人*/
if(i==sum)/*围成一圈*/
i=0;
}
for(i=0;i
return data[i];/*返回最后一个人的编号*/
}
void main()
{
int data[N];
int i,j,total,k;
printf("\nPlease input the number of every people.\n");
for(i=0;i
int input;
scanf("%d",&input);
if(input==0)
break;/*0表示输入结束*/
for(j=0;jif(data[j]==input)
break;
if(j>=i&&input>0)/*无重复,记录编号,继续输入*/
{
data[i]=input;
i++;
}
else
printf("\nData error.Re-input:");
}
total=i;
printf("\nYou have input:\n");
for(i=0;i
if(i%10==0)
printf("\n");
printf("%4d",data[i]);
}
printf("\nPlease input a number to count:");
scanf("%d",&k);
printf("\nThe last one's number is %d",yuesefu1(data,total,k));
}
.
看了约瑟夫环问题解答。需要算法和数...的网友还看了以下:
在测量跳远成绩时,从落地到起跳拉的皮尺应当与起跳线怎们样翼揩?噪枯草在尚有些寒意的春风中瑟缩着,瑟 2020-05-17 …
99%会答错:3个人3天用3桶水,9个人9天为什么用81桶水?在空间里看到这个俗称百分之九十九的人 2020-05-22 …
谜语问答古时一人赴京赶考,来到三岔路口,不知该走哪条路.只见一人在石头后面干活,便上前询问不料此人 2020-06-15 …
说明下列各字的构造类型?燕晶羊血果徒刃歪寇非常着急11点前一定拿到答案可以加200分。有没有能答上 2020-06-18 …
急需《从细微处看德国》读后感德国的冬天漫长阴郁,冷得彻骨.家里的暖气把人惯得懒散,躲在屋里不愿出门 2020-06-27 …
迎着瑟瑟的秋风,小雏菊摇晃着.改成拟人句 2020-07-04 …
秋天到了,杨树、槐树等阔叶树的叶子渐渐衰老,随着瑟瑟秋风,枯黄的树叶便悄然飘落了,枯黄的树叶能够从 2020-07-06 …
提到萧风瑟瑟的秋天自然会想起什么千古佳句 2020-07-06 …
提到秋风瑟瑟、支繁叶茂的夏,我想吟诵诗句“,。” 2020-07-06 …
英语真题做第二遍的时候怎么做?做第二编的时候重点是看什么?是着重分析文章、结构,还是着重做题?因为我 2020-12-02 …