题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
3
样例输出
2 使用无头循环单链表即可
1 #include2 #include 3 typedef struct huan { 4 unsigned int a; 5 struct huan *pNext; 6 }HUAN; 7 HUAN *Create(int n) { 8 HUAN *pHead, *pNew = NULL; int i; 9 pHead = (HUAN*)malloc(sizeof(HUAN));10 pHead->a = 1;11 pHead->pNext = NULL;12 HUAN *cyclic = pHead;13 for (i = 2; i <= n; i++) {14 pNew = (HUAN*)malloc(sizeof(HUAN));15 pNew->a = i;16 pNew->pNext = NULL;17 cyclic->pNext = pNew;18 cyclic = cyclic->pNext;19 }20 cyclic->pNext = pHead;21 return pHead;22 }23 void Sort(HUAN *head) {24 HUAN *pbefore, *p;25 p = head; pbefore =NULL;26 while (p->pNext!=p) {27 for (int i = 1; i < 3; i++) {28 pbefore = p;29 p = p->pNext;30 }31 pbefore->pNext = p->pNext;32 free(p);33 p = pbefore->pNext;34 35 }36 printf("%d", p->a);37 free(p);38 39 40 }41 42 int main() {43 int n; HUAN *p;44 scanf("%d", &n);45 p = Create(n);46 Sort(p);47 48 }