約瑟夫環問題

來源:互聯網
上載者:User

標籤:next   scan   void   print   etc   bre   break   std   style   

/* * 約瑟夫環 * 編號為1,2,.....,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數)。一開始人選一個正整數 * 作為報數上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的 * 密碼作為新的m值,從他在順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止。 * 試設計一個程式求出出列順序。
* 2018.10.2 fang*/#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <windows.h>void Joseph(int n,int m);typedef struct LNode{ int M; //當前出局人的編號 int Password; //當前出局人所帶的密碼 struct LNode *next;}JosephNode;int main() { while (1) { int n, m, s; printf("\t\t\t\t\t********約瑟夫環問題*********\n"); printf("\t1.請輸入參加的人數(n):"); scanf("%d", &n); if(n<1){ printf("**************參加人數(n)輸入了不適合的值,請重新輸入(Enter)."); getchar();getchar(); system("cls"); continue; } printf("\t2.請輸入起始報數的上限值(m):"); scanf("%d", &m); if(m<1){ printf("**************起始報數上限值(m)輸入了不適合的值,請重新輸入(Enter)."); getchar();getchar(); system("cls"); continue; } Joseph(n, m); printf("\t請問是否進入下一輪?\n\t\t(yes--1/no--0)"); scanf("%d",&s); if(s==0){ printf("\n\t退出迴圈..........."); sleep(2); system("cls"); break; } else if(s==1) { system("cls"); continue; } else exit(1); } return 0;}void Joseph(int n,int m){ int i,j,password; JosephNode *head,*p,*q,*L; /*第一步 錄入資料,形成一條鏈*/ head = p = (JosephNode *)malloc(sizeof(JosephNode)); for (i = 1; i <= n; i++) { //n--參加人數 q = (JosephNode *)malloc(sizeof(JosephNode)); p->next = q; q->M = i; printf("\t請輸入第%d號所帶的密碼:",i); scanf("%d",&password); q->Password=password; p=q; } /*第二步 把鏈首尾相連*/ p->next = head->next; free(head); L = q->next;//L一開始指在第一個元素上面 /*第三步 輸出結果*/ printf("\t\t\t\t出列者的編號順序是:"); while(p!=L){ for(j = 1; j < m; j++){ // m--起始報數上限值 p = L; L = L->next; } // p指在出鏈節點的前驅節點上,L指在出鏈節點上 p->next = L->next; printf("%d ",L->M); m = L->Password; // 新m是出鏈者的密碼 free(L); L = p->next; } printf("%d \n",p->M); free(L);}

測試結果:

約瑟夫環問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.