#include <stdio.h> #include <malloc.h> typedef struct LNode{ int num,pwd; struct LNode *next; }LNode,*LinkList; int main(void) { int i,j,m,n; //m为报数上限,n为人数。() printf("Please enter n="); scanf("%d",&n); printf("Please enter m="); scanf("%d",&m); LinkList head,tail,p,q; //head为头节点指针,tail为尾节点指针,p为当前指针的前一指针,q为当前指针。() head = (LNode*)malloc(sizeof(LNode)); p = head; for(i = 1; i < n; ++i) { q = (LNode*)malloc(sizeof(LNode)); p->next = q; p = q; } tail = q; tail->next = head; p = head; //建立n个节点的循环链表。 for(i = 1; i <= n; ++i) { p->num = i; //这个好象是一个一个设立结点的值,1.2.3.4..... printf("Please enter No.%d's password:",i); scanf("%d",&(p->pwd)); //**********是个小关键,不过有点错误 p = p->next; //这里好象是把那个输入的几号位的人删除了 } //输入密码。 printf("result:"); //输出删除的结果 p = tail; for(i = 1; i <= n; ++i) { for(j = 1; j < m; ++j) p = p->next; q = p->next; m = q->pwd; printf(" %d",q->num); p->next = q->next; free(q); } //输出编号。 return 0; } |
约瑟夫问题还有细节没有解决
最新推荐文章于 2024-07-20 15:53:47 发布