亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于如下約瑟夫問題的數據結構練練習題,請問我該怎么做?

關于如下約瑟夫問題的數據結構練練習題,請問我該怎么做?

米脂 2022-05-18 15:11:37
設有n個人站成一圈,每個人持有一個密碼(正整數)?,F從第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 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號