Êý¾Ý½á¹¹ÊµÑ鱨¸æ Լɪ·ò»·ÎÊÌâ

ÐÅϢѧԺ

Êý¾Ý½á¹¹ÊµÑ鱨¸æ

ѧºÅ£º ¿Î³ÌÃû³Æ£ºÊý¾Ý½á¹¹ ÐÕÃû£º °à¼¶ ʵÑéÃû³Æ£ºÔ¼Éª·ò»· ʵÑéÐÔÖÊ£º ¢Ù×ÛºÏÐÔʵÑé ¡Ì ¢ÚÉè¼ÆÐÔʵÑé ¢ÛÑéÖ¤ÐÔʵÑé ʵÑéʱ¼ä£º2017.10 ±¾ÊµÑéËùÓÃÉ豸£ºPC¼°VS2010 ¡¾Êý¾Ý½á¹¹¡¿£º typedef struct _RingNode { int pos; // λÖà struct _RingNode *next; }RingNode, *RingNodePtr; ¡¾Ë㷨˼Ïë¡¿£º ÒÔµ¥Á´±íʵÏÖԼɪ·ò»· Óû§ÊäÈëM,NÖµ£¬´Ó1ÖÁN¿ªÊ¼Ë³ÐòÑ­»·ÊýÊý£¬Ã¿Êýµ½MÊä³ö¸ÃÊýÖµ£¬Ö±ÖÁÈ«²¿Êä³ö¡££¨Ô¼Éª·ò»·ÎÊÌâ Josephus£©¡£ÒÔ»·×´Á´±íʵÏÖ ¡¾Ëã·¨ÃèÊö¡¿£º void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0) { pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // ¹¹³É»·×´Á´±í } ÊÔÑ鵨µã£º void PrintRing(RingNodePtr pHead) { RingNodePtr pCurr; printf(\ pCurr = pHead->next; while(pCurr != NULL) { if(pCurr->pos == 1) break; printf(\ pCurr = pCurr->next; } } void KickFromRing(RingNodePtr pHead, int m) { RingNodePtr pCurr, pPrev; int i = 1; // ¼ÆÊý pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == m) { // Ìß³ö»· printf(\ÏÔʾ³öȦѭÐò pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr; pCurr = pCurr->next; if (pPrev == pCurr) { // ×îºóÒ»¸ö printf(\ÏÔʾ³öȦѭÐò free(pCurr); break; } i++; } } int main() { int m = 0, n = 0; RingNodePtr pHead = NULL; printf(\ printf(\ scanf(\ printf(\ scanf(\ if(n <= 0 || m <= 0) { printf(\ system(\ return 0; } // ½¨Á¢Á´±í pHead = (RingNodePtr)malloc(sizeof(RingNode)); pHead->pos = 1; pHead->next = NULL; CreateRing(pHead, n); #ifdef _DEBUG PrintRing(pHead); #endif // ¿ªÊ¼³öȦ printf(\ KickFromRing(pHead, m); printf(\ system(\ return 0; }

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4