約瑟夫生死遊戲(單鏈表實現)

來源:互聯網
上載者:User

標籤:鏈式   鏈表   初始化   資料   計算   人才   rand   style   儲存結構   

本周的作業還算挺好玩。。約瑟夫生死遊戲嘛。

老師要抽籤選擇每個組對應的資料結構。結果寶寶抽到了單鏈表。。。。

一、項目簡介

      約瑟夫生者死者遊戲的大意是:30個旅客同乘一條船,因為嚴重超載,加上風高浪大,危險萬分;因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免遇難。無奈,大家只得同意這種辦法,並議定30個人圍成一圈,由第一個人開始,依次報數,數到第9人,便把他投入大海中,然後從他的下一個人數起,數到第9人,再將他投入大海,如此迴圈,直到剩下15個乘客為止。問哪些位置是將被扔下大海的位置。

二、設計思路

      約瑟夫環問題是演算法設計中的一個經典問題,是順序編號的一組n個人圍坐一圈,從第1個人按一定方向順序報數,在報到m時該人出列,然後按相同方法繼續報數,直到所有人出列。設計演算法求約瑟夫環中人員的出列順序。

線性表、隊列是一種常用的資料結構,有順序和鏈式兩種儲存結構,在實際中應用十分廣泛,而鏈表又分為單鏈表和迴圈鏈表,隊列又分為鏈式隊列和迴圈隊列。這些資料結構都可用來解決約瑟夫環問題。

三、 基本要求

1、選擇合適的儲存結構,建立線性表;

2、利用單鏈表求解約瑟夫環問題;

四、測試資料

約瑟夫環的開始位置、長度、報數可以從鍵盤輸入合法資料,或者隨機產生。

代碼如下:

      我的資料是隨機產生滴。

  1 #include <cstdio>  2 #include <ctime>  3 #include <cstdlib>  4   5 int kk=0;  6 int ll;  7   8 typedef struct people  9 { 10     int num; 11 }PEO; 12 typedef struct Node 13 { 14     PEO data; 15     struct Node * next; 16 }Node; 17  18 Node *InitList(Node *L)//初始化單鏈表 19 { 20     L=(Node *)malloc(sizeof(Node)); 21     L->next=NULL; 22     return L; 23 } 24  25 void CreateFormTail(Node *L)//尾插法 26 { 27     Node *s,*r; 28     r=L; 29     int aa=30-ll+1+1; 30     for(int i=1;i<=30;i++){ 31         s=(Node *)malloc(sizeof(Node));    32         s->data.num=aa;  33         r->next=s; 34         r=s; 35         if(i==30){ 36             r->next=NULL; 37         } 38         if(aa==30) 39             aa=1; 40         else 41             aa++; 42          43     } 44 } 45 void Printf(Node *L) 46 { 47     int q=0; 48     Node *p=L->next; 49     while(p!=NULL) 50     { 51         q++; 52         printf("%d\n",p->data.num); 53         p=p->next; 54     } 55     printf("單鏈表長度為%d\n",q); 56 } 57  58 void sou(Node *L) 59 { 60     Node *s,*r,*pre; 61     r=L; 62     s=r->next; 63     for(int i=1;i<=30;i++){ 64         if(s->data.num==1) 65             break; 66         else 67             r=r->next; 68             s=r->next; 69              70     } 71     printf("被丟下水的報數按順序為\n"); 72     while(kk<15){ 73         for(int j=1;j<9;j++){ 74             r=r->next; 75             s=r->next; 76             if(s->next==NULL){ 77                 s->next=L->next; 78             } 79             if(r->next==NULL){ 80                 r->next=L->next; 81             } 82         } 83         printf("%d\n",s->data.num); 84         s=s->next; 85         pre=r->next; 86         r->next=s; 87         free(pre); 88         kk++; 89     } 90 } 91  92 int main() 93 { 94     srand(time(NULL));//初始化隨機化種子           95     ll=rand()%30+1; 96     printf("第%d個人從1開始報數\n",ll); 97     printf("本題條件30個人從1開始數,數到第9個人就丟下水,要丟下去15個人\n"); 98     Node *L=NULL; 99     L=InitList(L);100     CreateFormTail(L);101     Printf(L);102     sou(L);103     104     return 0;105 }

 

約瑟夫生死遊戲(單鏈表實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.