题目是:
有N个小孩子,按顺时针方向围成一个圆。老师指定从第一个小孩开始报数,按顺序1,2,3…… 数到M个小孩时,该小孩子退到圈外,然后从编号为M的下一个小孩子开始报数。如此重复下去,直到所有小孩都出列,求小孩的出列顺序。 1.用链表处理 2.N和M用键盘输入。 3.分别用3个函数创建一个链表的求解。完成的求解用链表输出小孩的出列顺序。 4.在主函数中调用上面的函数。
这是我做的,但是有好多的错误。 我不知道要怎么修改呀!!麻烦大哥帮忙看下!!
#include <stdio.h> #include <malloc.h> #include <conio.h> typedef struct node_type{ int seq,code; struct node_type *next; }link; main() { int i,m,n,cn; link *h,*p,*q; printf("Input the first code m:"); scanf("%d",&m);//输入初始数 printf("Input number n:"); scanf("%d",&n);//输入人数 m=m-1;//此处减一是相当于... p=(link*)malloc(sizeof(link)); h=p; q=p; printf("Input codes:"); for(i=1;i<=n-1;i++) { scanf("%d",&cn); p->seq=i;p->code=cn; p=(link*)malloc(sizeof(link)); q->next=p; q=p; } scanf("%d",&cn); p->seq=n; p->code=cn; p->next=h; if((n>1)&&(m==0)) { m=h->code;printf("%d ",h->seq); p->next=h->next; free(h); h=p->next; } p=h; while((n>1)&&(m!=0)) { if(m>1) for(i=1;i<=m-1;i++)p=p->next; q=p->next; m=q->code; printf("%d ",q->seq); p->next=q->next; free(q); n=n-1; } printf("%d\n",p->seq); getch(); }
急呀!!谢谢咯!!!
[此贴子已经被作者于2004-06-14 22:09:41编辑过]