10个人,然后数到第5个出局,程序得出的结果是第一个数数到5,然后出局,而之后的数都是数到4就出局,这里有点不明白程序错在哪里,该怎么改。 #include <stdlib.h> #include<stdio.h> struct node{ int data; struct node *next; }node,*list,*p,*r; void JOSEPHU(int n,int m) { int i,j; list=NULL; for(i=1;i<=n;i++) { p=(struct node*)malloc(sizeof(node)); p->data=i; if(list==NULL) list=p; else r->next=p; r=p; } p->next=list; /*建立一个循环链表*/ p=list; for(i=1;i<=n;i++) { printf("%d ",p->data); p=p->next; } printf("\n"); /*打印链表,并检查循环链表是不输入正确*/ for(i=1;i<n;i++) { for(j=1;j<m;j++) { r=p; p=p->next; } printf("出局人:%d\n",p->data); r->next=p->next; } } void main() { int x, z; printf("请输入总人数:"); scanf("%d",&x); printf("请输入密码:"); scanf("%d",&z); JOSEPHU(x,z); } |
|
20分 |
修改如下:
void JOSEPHU(int n, int m) { int i, j; list = NULL; for (i = 1; i <= n; i++) { p = (struct node*)malloc(sizeof(node)); p->data = i; if (list == NULL) list = p; else r->next = p; r = p; } p->next = list; /*建立一个循环链表*/ p = list; for (i = 1; i <= n; i++) { printf("%d ", p->data); p = p->next; } printf("\n"); /*打印链表,并检查循环链表是不输入正确*/ for (i = 1; i<n; i++) { for (j = 1; j<m; j++) { r = p; p = p->next; } printf("出局人:%d\n", p->data); r->next = p->next; p = p->next; //加一句 } } |
代码有内存泄露的问题,值得注意
|