约瑟夫环杂题
N个人围成一圈顺序编号,从1号开始按1、2、3顺序报数,报3者退出圈外,其余的人再从1、2、3开始报数,报3的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。要求使用环行链表编程。
模拟题。
1 #include <iostream> 2 #include <cstdlib> 3 using namespace std; 4 5 typedef struct node{ 6 int iNum; 7 struct node *next; 8 }LNode; 9 10 int main(){ 11 LNode *head, *p, *t; 12 int N; 13 cout << "输入人数:"; 14 cin >> N; 15 p = (LNode*)malloc(sizeof(LNode)); 16 p->iNum = 1; 17 p->next = NULL; 18 head = p; 19 for(int i = 2; i <= N; i++){ 20 t = (LNode*)malloc(sizeof(LNode)); 21 t->iNum = i; 22 t->next = p->next; 23 p->next = t; 24 p = t; 25 } 26 p->next = head; 27 p = head; 28 while(p->next != p){//只要链表中多于两个人 29 t = p->next; 30 cout << t->next->iNum << " "; 31 t->next = t->next->next; 32 p = t->next; 33 } 34 cout << p->iNum << endl; 35 return 0; 36 }
越努力,越幸运