为了账号安全,请及时绑定邮箱和手机立即绑定

关于如下约瑟夫问题的数据结构练练习题,请问我该怎么做?

关于如下约瑟夫问题的数据结构练练习题,请问我该怎么做?

米脂 2022-05-18 15:11:37
设有n个人站成一圈,每个人持有一个密码(正整数)。现从第t个人开始,按顺时针方向“1,2,3,4,…”循环报数,数到m1(第t个人所持密码)的人出列,然后从出列者的下一个人重新开始报数,数到m2(刚出列者所持密码)的人又出列,如此重复进行,直到n个人都出列为止。问题是:对于任意给定的n个人的原始排列顺序,求出n个人的出列顺序。输入数据从文本文件“1.txt”中读取。该文件有两行:第1行只有一个整数,表示报数的起始位置;第2行是n个所持密码。输出结果显示在屏幕上。例如,从文本文件读取数据25 6 3 2 2 4屏幕显示1 6 5 3 4 2希望高手给出解答,谢谢!
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

前面两位都用链表,用链表解决约瑟夫问题是最好的。我这里补充用数组来解决约瑟夫问题的问题,希望能对你有帮助(我这里没用文件操作命令,只用普通的读写语句)
pascal
var n,m,s,f,t:integer;
a:array[1..100] of boolean;
begin
readln(n,m);
for t:=1 to n do
a[t]:=false;
f:=0; t:=0; s:=0;
repeat
t:=t+1;
if t=n+1 then t:=1;
if a[t]=false then s:=s+1;
if s=m then
begin
s:=0;
writeln(t,' ');
a[t]:=true;
f:=f+1;
end;
until f=n;
end.



查看完整回答
反对 回复 2022-05-23
?
HUH函数

TA贡献1836条经验 获得超4个赞

#include"stdio.h"
main()
{
int i,j,a[100],b[100],t,m,n;
scanf("%d%d",&n,&m);
for(i=n;i>1;i--)
{
for(t=1;t<m%i;t++)
b[t]=a[t];
for(j=m%i+1;j<=i;j++)
a[j-m%i]=a[j];
for(t=i-m%i;t<i;t++)
a[t]=b[t-i+m%i+1];
}
printf("%d",a[1]);
}

#include "stdio.h"
main()
{
int t=0,T=0,i,j,m,n,a[1000],p;
for (j=0;;j++)
{p=0;
scanf ("%d%d",&n,&m);
if (n==0||m==0)
break;
for (i=0;i<n;i++)
a[i]=1;

for (i=0;;i++)
{
if (i==n) i=0;
t=t+a[i];
if (t-m==0)
{a[i]=0;p++;t=0;if (p==n-1) break;}
}

for (i=0;;i++)
if (a[i]==1)
{printf ("%d\n",i+1);break;}

}

}

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}listnode,*linklist;

linklist creatlist(int n,linklist R)
{
listnode *p,*q;
int i;
R=q=(listnode*)malloc(sizeof(listnode));
for(i=1;i<n;i++)
{
p=(listnode*)malloc(sizeof(listnode));
q->data=i;q->next=p;q=p;

}
p->data=n;p->next=R;R=p;return R;

}

linklist deletenode(int n,int k,linklist R)
{
int i,j;listnode *p,*q;
p=R;
for(i=1;i<n;i++)
{
for(j=1;j<k;j++)
p=p->next;
q=p->next;
p->next=q->next;
free(q);
}
R=p;return R;

}

void outring(int n,linklist R)
{
listnode *p;p=R;printf("%d",p->data);

}

void main()
{
linklist R;int n,k;
scanf("%d%d",&n,&k);
R=creatlist(n,R);
R=deletenode(n,k,R);
outring(n,R);
}



查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 321 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号