早教吧作业答案频道 -->其他-->
C语言实现舞伴问题(队列)假设在周末舞会上,男士们(m人)和女士们(n人)进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不
题目详情
C语言实现舞伴问题(队列)
假设在周末舞会上,男士们(m人)和女士们(n人)进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。并求m和n存在什么条件时,第x个(1<=x<=m)男生才有可能和他心仪的第y个(1<=y<=n)女生跳舞,在第几首曲子时?
假设在周末舞会上,男士们(m人)和女士们(n人)进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。并求m和n存在什么条件时,第x个(1<=x<=m)男生才有可能和他心仪的第y个(1<=y<=n)女生跳舞,在第几首曲子时?
▼优质解答
答案和解析
#includetypedef struct que{
int *qu;
int front,rear;
}Squeue;
void Initqueue(Squeue *q,int len);
void Enqueue(Squeue *q,int n,int len);
int Dequeue(Squeue *q,int len);
int main()
{ int m,n,x,y,i,j,num=0;
Squeue q1,q2;
scanf("%d%d",&m,&n);//Input m and n;
Initqueue(&q1,m);
Initqueue(&q2,n);
for(i=0;i for(i=0;i if(x!=y&&m==n) { printf("No chance");sleep(1000);exit(0);}
i=Dequeue(&q1,m);
j=Dequeue(&q2,n);
printf("MW\n");
while(!(x==i&&y==j))
{Enqueue(&q1,i,m);
Enqueue(&q2,j,n);
printf("%d%d\n",i,j);
i=Dequeue(&q1,m);
j=Dequeue(&q2,n);
num++;
}
printf("%d%d\n",i,j);
printf("The number is %d\n",num+1);
free(q1.qu);
free(q2.qu);
system("pause");
return 0;
}
void Initqueue(Squeue *q,int len)
{
q->qu=(int*)malloc(len*sizeof(int)) ;
if(!q->qu) exit(0);
q->front=q->rear=0;}
void Enqueue(Squeue *q,int n,int len)
{q->qu[q->rear]=n;
q->rear=(q->rear+1)%len;
}
int Dequeue(Squeue *q,int len)
{int e;
e=q->qu[q->front];
q->front=(q->front+1)%len;
return e;
}在dev和win_tc中通过,在用队列的时候,没有考虑特殊情况,没影响。下面未用队列的算法似乎是很简单,也可以在dev 和win_tc上通过
#include
int main()
{ int m,n;
int i,j,k=0;
int x,y;
printf("Input the number of ladies and gentlemen:");
scanf("%d%d",&m,&n);
printf("Input the location of the man and the woman:");
scanf("%d%d",&x,&y);
if(m==n&&x!=y) printf("No chance!");
else
{for(i=0,j=0;!(i==x&&j==y);i=(i+1)%m,j=(j+1)%n)
{printf("man(%d)woman(%d)\n",i+1,j+1); k++;}
printf("\nThe number of song is:%d\n",k);
}
system("pause");
return 0;
}
int *qu;
int front,rear;
}Squeue;
void Initqueue(Squeue *q,int len);
void Enqueue(Squeue *q,int n,int len);
int Dequeue(Squeue *q,int len);
int main()
{ int m,n,x,y,i,j,num=0;
Squeue q1,q2;
scanf("%d%d",&m,&n);//Input m and n;
Initqueue(&q1,m);
Initqueue(&q2,n);
for(i=0;i
i=Dequeue(&q1,m);
j=Dequeue(&q2,n);
printf("MW\n");
while(!(x==i&&y==j))
{Enqueue(&q1,i,m);
Enqueue(&q2,j,n);
printf("%d%d\n",i,j);
i=Dequeue(&q1,m);
j=Dequeue(&q2,n);
num++;
}
printf("%d%d\n",i,j);
printf("The number is %d\n",num+1);
free(q1.qu);
free(q2.qu);
system("pause");
return 0;
}
void Initqueue(Squeue *q,int len)
{
q->qu=(int*)malloc(len*sizeof(int)) ;
if(!q->qu) exit(0);
q->front=q->rear=0;}
void Enqueue(Squeue *q,int n,int len)
{q->qu[q->rear]=n;
q->rear=(q->rear+1)%len;
}
int Dequeue(Squeue *q,int len)
{int e;
e=q->qu[q->front];
q->front=(q->front+1)%len;
return e;
}在dev和win_tc中通过,在用队列的时候,没有考虑特殊情况,没影响。下面未用队列的算法似乎是很简单,也可以在dev 和win_tc上通过
#include
int main()
{ int m,n;
int i,j,k=0;
int x,y;
printf("Input the number of ladies and gentlemen:");
scanf("%d%d",&m,&n);
printf("Input the location of the man and the woman:");
scanf("%d%d",&x,&y);
if(m==n&&x!=y) printf("No chance!");
else
{for(i=0,j=0;!(i==x&&j==y);i=(i+1)%m,j=(j+1)%n)
{printf("man(%d)woman(%d)\n",i+1,j+1); k++;}
printf("\nThe number of song is:%d\n",k);
}
system("pause");
return 0;
}
看了 C语言实现舞伴问题(队列)假...的网友还看了以下:
一个四年级数学题目解放军队伍工480米,每分钟前行70米,一位队员因事要从末尾到排头,又从排头到末 2020-05-13 …
一个修路队4小时修九分之二千米,平均每小时修路多少千米?照这样的速度,这个修路队一天(按八小时算) 2020-05-14 …
你看看这个题咋做了,同学们参加课外小组,合唱队有4人,舞蹈队有14人,从合唱队调几人到舞蹈队,舞蹈 2020-06-14 …
C语言实现舞伴问题(队列)假设在周末舞会上,男士们(m人)和女士们(n人)进入舞厅时,各自排成一队 2020-06-18 …
一列长为S的队伍以速度V1沿笔直的公路匀速前进,一个传令兵以较快的速度V2从队末向队首传递文件,又 2020-07-13 …
一列长为S的队伍以速度u沿笔直的公路匀速前进.一个传令兵以较快的速度v从队末向队首传递文件,又立即 2020-07-22 …
唐朝歌舞既优美和谐,又铿锵热烈,具有盛世特色,其中有唐太宗参与编创的歌舞大曲是()A《秦王破阵乐》B 2020-11-25 …
学校艺术队共有队员200人,其中合唱队的人数是舞蹈队的4倍,则合唱队,舞蹈队各有多少人? 2020-12-10 …
校舞队同学排队,如果每行站8人,多出3人;如果每行站9人,少一行人.问:舞蹈队共站了多少行?舞蹈队员 2020-12-10 …
学校跳舞队人数是篮球队人数的3倍,刚好比篮球队的人数少30人,舞蹈队和篮球队各有多少人?设方程并解答 2021-01-09 …