我初学C语言,弄了一个简单的人员出列程序。请高人指点。如有人帖上链表解法,在下感激不尽。
/*出列问题的解法*/#include<stdio.h>
struct men
{int nextp;
int no;
}link[1000];
void main(void)
{ int i,k=0,m,n,y,count=0; /**n存储总人数,m存储从第几个人报数,y存储报到此数时该人出列值********/
/**count统计已经出列的总人数,初始为0*********************************/
printf("请输入总人数?");
scanf("%d",&n);
printf("从第几个人开始报数?");
scanf("%d",&m);
printf("当报数多少时此人出列?");
scanf("%d",&y);
for(i=0;i<n;i++) /*为结构赋初值,成员nextp用来判断是否已经出列,这里全部初始成1,即全部在列*/
{link[i].nextp=1;link[i].no=i+1;} /*成员no为人员的编号****************************************/
while(count!=n) /*当已出列人数count等于总人数n时,即所有人都已出列,结束循环**********/
{if(link[m-1].nextp)k++;
/*由于数组下标是从0开始,这里第m个人所在数组的下标为m-1,k记录报数值,当所对应的nextp为1时,表示该人*/
/*在列,参予报数;为0时,表示该人已出列,跳过。**********/
if(k==y) /*当k等于y时,满足出列条件*******************************************/
{printf("%-4d",link[m-1].no); /*输出该人的编号,即该人对应的结构成员no的值*/
k=0;link[m-1].nextp=0; /*计数变量K归零,重新从1开始计数,并把已出列人对应的nextp置为0,不*/
if((++count)%20==0)printf("\n");} /*再参予报数,count累加出列人数,出列人数达到20人时,换行重新输出*/
m++;if(m>n)m=1; /*m++驱使下一个人接着报数,当其数值超过报数总人数时,令其为1,又由第1个人接着报数*/
}
}