設有n個人圍坐一圈,現以某個人開始報數,數到m的人出列,接着從出列的下一個人開始重新報數,數到m的人又出列,如此下去,直到所有人都出列爲止.按出列順序輸出.
這段代碼是從網上找來的,在此特別說明!!!!!
- #include "stdlib.h"
- struct ele {
- int no;
- struct ele *link;
- } main() {
- struct ele *h, *u, *p;
- int n, m, i;
- printf("Please input n&m:/n" );
- scanf("%d%d" , &n, &m); /*輸入n和m*/
- h = u = (struct ele *) malloc( sizeof ( struct ele)); /*形成首表元*/
- h->no = 1;
- for (i = 2; i <= n; i++) /*形成其餘的n-1個表元*/
- {
- u->link = (struct ele *) malloc( sizeof ( struct ele));
- u = u->link;
- u->no = i;/*第i個表元置編號i*/
- }
- u->link = h;/*末表元后繼首表元,形成環*/
- puts(
- "/nThe numbers of who will quit the cycle in turn are:" );
- while (n) {
- for (i = 1; i < m; i++)
- /*掠過m-1個表元*/
- u = u->link;
- p = u->link;/*p指向第m個表元*/
- u->link = p->link;/*第m個表元從環中脫鉤*/
- printf("%4d" , p->no);
- free(p);/*釋放第m個表元佔用的空間*/
- n--;
- }
- printf("/n/n Press any key to quit.../n" );
- getchar();
- }
當碰到問題,首先考慮這個問題是怎樣的類型,第二從解決列表中選擇中最合適的方案.以這個問題爲例:問題中是一個循環性質,關鍵點“有n個人圍坐一圈”。 可選數據結構與算法中的可選方案:隊列,棧,線性表,串。隊列,棧和串都不大合適。以線性表中的單向循環鏈表最合適。