舞伴问题
假定在一舞会上,男士排成一队,女士排成一队。跳舞开始时,依次从男队和女队的队头各出一人配成舞伴。
若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
[基本要求]
模拟上述舞伴系统,并能计算对于任何男士A和女士B在哪一轮舞曲中的k次跳舞。
[实现提示]
用循环队列实现上述操作*/
#include <stdio.h>
#include <malloc.h>
#define MAX 7
typedef int elemtype;
typedef struct
{
elemtype data;
int front, rear;
int num;//人数
}sequeue;
typedef struct
{
int turn;
intorder;
}partner;
void addqueue(); //入队
elemtype outqueue(); //出队
elemtype getqueue(); //读取队头
void play(); //配对输出情况
void search(); //配对查找情况
void inqueue(); //男女入队
void menu();
sequeue *man,*woman;
partner dance;
main()
{
char ch;
inqueue();
play();
printf("\n按任意键查找男女士配对情况,按 @ 号建结束 \n");
scanf("%s",&ch);
getchar();
while(ch != '@')
{
search();
printf("\n按任意键查找男女士配对情况,按 @ 号建结束\n");
scanf("%s",&ch);
getchar();
}
}
void addqueue(sequeue *q,int x)
{
if((q->rear+1)%MAX==q->front)
printf("队满\n");
else
{
q->rear=(q->rear+1)%MAX;
q->data=x;
}
}
int outqueue(sequeue *q)
{
if(q->rear==q->front)
return 0;
else
{
q->front=(q->front+1)%MAX;
addqueue(q,q->data);
return q->data;
}
}
void inqueue()
{
int i;
//sequeue *man,*woman;
man=(sequeue *)malloc(sizeof(sequeue));
woman=(sequeue *)malloc(sizeof(sequeue));
printf("请输入男士和女士的人数:");
scanf("%d%d",&man->num,&woman->num);
while(man->num>MAX || woman->num>MAX)
{
printf("\n输入数目过大,请重新输入!\n\n请输入男士和女士的人数:");
scanf("%d%d",&man->num,&woman->num);
}
for(i=1;i<=man->num;i++)
addqueue(man,i);
for(i=1;i<=woman->num;i++)
addqueue(woman,i);
}
void play()
{
// sequeue *man;
// sequeue *woman;
// partner p;
int m,w,i,j;
m=outqueue(man);//男士首次出队
w=outqueue(woman);//女士首次出队
i=1;
j=1;
dance.turn=i; //第一轮
dance.order=j; //第一次
printf("%d\t%d\n",m,w);
while(m<man->num || w<woman->num)
{
m=outqueue(man);
w=outqueue(woman);
j=j+1;
dance.turn=i;
dance.order=j;
printf("%d\t%d\n",m,w);
if(man->num <= woman->num && m==man->num)
{
printf("男士人数已排完,第%d个曲目的舞蹈结束 !\n",i);
i=i+1;
j=0;
}
if(man->num > woman->num && w==woman->num)
{
printf("女士人数已排完,第%d个曲目的舞蹈结束 !\n",i);
i=i+1;
dance.turn=i;
j=0;
}
}
printf("\n搭配完成 !\n");
}
void search()
{
int m,w;
printf("\n请输入待查找的男女序号--");
scanf("%d%d",&m,&w);
if(dance.turn==0)
printf("\n该男士与该女士没有搭配曲目!\n");
else
printf("\n*****第 %d 号男士和第 %d 号女士在第 %d 轮曲目第 %d 次入场!*****\n",m,w,dance.turn,dance.order);
}
感觉还有些小缺陷,哪位大神能帮我改进改进,谢谢
页:
[1]