約瑟夫問題 順序表求解

2021-08-28 09:48:52 字數 1284 閱讀 7786

#include "stdio.h"

#include "stdlib.h"

#define maxsize 100

typedef struct node seqlist,*pseqlist; //定義乙個順序表

pseqlist init_seqlist() //順序表初始化

printf("creat error");

return null;

}int insert_seqlist(pseqlist pl,int i,int x) //順序表的插入,i為插入位置(陣列下標,從0開始,下同),x為插入數值

//-2 表不存在,-1 溢位,0 插入位置不合法 ,1插入成功

if(pl->length>=maxsize)

if(i<0||i>pl->length)

for(j=pl->length-1;j>=i;j--)

pl->data[j+1]=pl->data[j];

pl->data[i]=x;

pl->length++;

return 1;

}int delete_seqlist(pseqlist pl,int i) //順序表的刪除,i為刪除位置(陣列下標),返回-2 表不存在,0,刪除位置不合法,1刪除成功

if(i<0||i>pl->length-1)

for(j=i;jlength-1;j++)

pl->data[j]=pl->data[j+1];

pl->length--;

return 1;

}int josephus_seqlist(pseqlist josephus_seq, int s, int m) //求解約瑟夫問題的出列元素序列入口引數:已經存放資料的順序表,

//起始位置s,數m , 出口引數:1表示成功,0表示表中沒有元素

s1=s; //陣列下標

printf("輸出約瑟夫序列:");

for(i=josephus_seq->length;i>0;i--)

return 1;

}void main()

printf("\n 請輸入開始計數對應陣列下標:\n"); //輸入計數字置(陣列下標)和技術步長

scanf("%d",&s);

printf("請輸入計數步長:\n");

scanf("%d",&m);

josephus_seqlist(list,s,m);

printf("\n");

}

約瑟夫問題求解

終於又到了大名鼎鼎的約瑟夫問題了。約瑟夫問題也算是近代比較知名的乙個演算法問題了,有著成熟的演算法,其中有著強行模擬,還存在著一些神奇的數學方法,哈哈。今天我又來了強行模擬。啊,啊,啊。瞎。下面是問題的描述 題目描述 description 乙個旅行社要從n名旅客中選出一名幸運旅客,為他提供免費環球...

約瑟夫問題的求解!

已知有n 只猴子 以編號1,2,3,n 分別表示 圍坐一圈。從第一只猴子開始,按順序從1開始報數,數到 m 的那只猴子出列 接著再從從1 開始報數,報數到 m的那只猴子又出列 依此規律重複下,直到只剩乙隻猴子為止。輸入n和m,輸出最後剩下的猴子?此問題,即報數問題,也是約瑟夫問題!很多人一開始想到是...

約瑟夫環問題求解

約瑟夫問題如下 n個人圍成圈,依次編號為1,2,n,現在從1號開始依次報數,當報到m時,報m的人退出,下乙個人重新從1報起,迴圈下去,問最後剩下那個人的編號是多少?input amount 佇列人數 m 數到m時退出乙個人 output 最後乙個退出的人的下標 思路 用布林陣列做 我們可以把這amo...