求大神看一下哪里错了
1. 设有n个人坐在圆桌周围,从第s个人开始报数,数到m的人出列,然后再从下一个人开始报数,同样数到m的人出列,如此重复,直到所有人都出列为止。要求输出出列的顺序。
#include"stdio.h"
typedef char datatype;
typedef struct node
{
datatype info;
struct node *next;
}NODE;
void joseph(int n,int s,int m)
{
int i,j;
NODE*creatlinklist(int);
NODE*h,*p,*q,*r;
if(n<s)
return;
h=creatlinklist(n);
q=h;
for(i=1;i<s;i++)
q=q->next;
p=q->next;
for(i=1;i<n;i++)
{
for(j=1;j<m;j++)
if((p->next!=NULL)&&(q->next!=NULL))
{q=q->next;
p=p->next;
}
else
if(p->next==NULL)
{
q=q->next;
p=h->next;
}
else
{
q=h->next;
p=p->next;
}
printf("%c ",p->info);
r=p;
if(p->next==NULL)
{
p=h->next;
q->next=NULL;
}
else
{
p=p->next;
if(q->next!=NULL)
q->next=p;
else
h->next=p;
}
free(r);
}
printf("%c ",(h->next)->info);
}
NODE *creatlinklist(int n)
{
int i;
NODE *head,*p,*q;
if(n==0)
return NULL;
head=(NODE *)malloc(sizeof(head));
q=head;
for(i=1;i<=n;i++)
{
p=(NODE *)malloc(sizeof(head));
printf("Enter a element ");
scanf("&C",&p->info);
q->next=p;
q=p;
}
p->next=NULL;
return head;
}
main()
{
int n,s,m;
printf("Please input n,s and m: ");
scanf("%d %d %d",&n,&s,&m);
joseph(n,s,m);
}
程序至少有一个明显错
scanf("&C",&p->info);
应该为
scanf(" %c",&p->info);
另外,若是OJ要注意程序的输入/出格式
不能抄网上的程序