排序系统设计
题目:
功能:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。
分步实施:
(1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
(2)完成最低要求:建立一个文件,包括某人5个人的情况。
(3)进一步要求:在此基础上可以设计扩充程序功能。
#include<stdio.h>
#include<time.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 100
typedef struct people
{
int
source;
int code;
struct people
*next;
}Man;
void PlayGame(Man *p1,int m)
{
int
count=1;
Man *p2=p1->next;
printf("出队的顺序如下\n");
while(p2->next!=p2)
{
if(count==m)
{
p1->next=p2->next;
printf("%4d(%d)",p2->source,p2->code);
count=1;
m=p2->code;
free(p2);
p2=p1->next;
}
else
{
p1=p2;
p2=p2->next;
count++;
}
}
printf("%4d(%d)",p2->source,p2->code);
printf("\n");
}
Man * CreateMan()
{
int
man=0;
int m=0;
int
i=0;
Man *p1,*p2,*head;
randomize();
printf("输入玩游戏的人数:\n");
scanf("%d",&man);
for(i=1;i<=man;i++)
{
p1=(Man
*)malloc(sizeof(Man)*man);
p1->source=i;
p1->code=rand()%5+1;
p1->next=NULL;
if(i==1)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
p2->next=head;
printf("人的编号和各自的密码为:\n");
p1=head;
for(i=1;i<=man;i++)
{
printf("%4d(%d)",p1->source,p1->code);
p1=p1->next;
}
printf("\n");
return p2;
}
void
main()
{
Man *p1;
int
start=0;
system( "graftabl 936
");
p1=CreateMan();
printf("出队的m序号:\n");
scanf("%d",&start);
PlayGame(p1,start);
getch();
}

浙公网安备 33010602011771号