SWUST OJ(956)
约瑟夫问题的实现
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct LNode 5 { 6 int data; 7 struct LNode *next; 8 }LinkList; 9 10 void CreateList(LinkList *& L, int l) 11 { 12 L =(LinkList*)malloc(sizeof(LinkList)); 13 LinkList *r; 14 r = L; 15 r->next = L; 16 LinkList * p; 17 18 for (int i = 0; i < l; ++i) 19 { 20 p =(LinkList*)malloc(sizeof(LinkList)); 21 p->data = i+1; 22 p->next = L; 23 r->next = p; 24 r = p; 25 } 26 } 27 28 LinkList* find(LinkList *p, int n, int &e, LinkList *L) 29 { 30 LinkList * r; 31 r = p; 32 for(int i = 0;i<n-1; i++) 33 { 34 r = r->next; 35 if (r == L) 36 { 37 r = r->next; 38 } 39 } 40 LinkList * q; 41 if (r->next == L) 42 { 43 q = r->next->next; 44 } 45 else 46 { 47 q = r->next; 48 } 49 e = q->data; 50 r->next = q->next; 51 return q; 52 } 53 54 int main(int argc, char const *argv[]) 55 { 56 LinkList *L; 57 int n,k; 58 scanf("%d",&n); 59 scanf("%d",&k); 60 CreateList(L,n); 61 int e; 62 LinkList* p; 63 p = L; 64 for (int i = 0; i < n; ++i) 65 { 66 p = find(p,k,e,L); 67 } 68 printf("%d",e); 69 return 0; 70 }