舞伴配对问题java_舞伴配对问题
循環(huán)隊(duì)列的應(yīng)用——舞伴配對(duì)問(wèn)題:在舞會(huì)上,男、女各自排成一隊(duì)。舞會(huì)開(kāi)始時(shí),依次從男隊(duì)和女隊(duì)的隊(duì)頭各出一人配成舞伴。如果兩隊(duì)初始人數(shù)不等,則較長(zhǎng)的那一隊(duì)中未配對(duì)者等待下一輪舞曲。假設(shè)初始男、女人數(shù)及性別已經(jīng)固定,舞會(huì)的輪數(shù)從鍵盤(pán)輸入。試模擬解決上述舞伴配對(duì)問(wèn)題。要求:從屏幕輸出每一輪舞伴配對(duì)名單,如果在該輪有未配對(duì)的,能夠從屏幕顯示下一輪第一個(gè)出場(chǎng)的未配對(duì)者的姓名。
//循環(huán)隊(duì)列的常用函數(shù)
#include
#include
#define Maxsize 100
typedef struct{
int *base;
int front;
int rear;
int k; //記錄初始位置
}squeue;
int a,b,i,j,n,m1,m2,m;
void Initqueue(squeue &Q)
{
Q.base=(int*)malloc(Maxsize*sizeof(int));
if (!Q.base)
exit(1);
Q.front=Q.rear=Q.k=0;
}
void Push(squeue &Q,int e)
{
if ((Q.rear+1)%Maxsize==Q.front) //隊(duì)滿處理
return;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%Maxsize;
}
void Pop(squeue &Q,int &e)
{
if (Q.rear==Q.front) //判空處理
return;
e=Q.base[Q.front];
Q.front=(Q.front+1)%Maxsize;
if (Q.front==Q.rear)
{
Q.front=Q.k;
}
}
void GetHead(squeue Q)
{
printf("%d\n",Q.base[Q.front]);
}
int main()
{
squeue Q,P;
Initqueue(P);
Initqueue(Q);
printf("請(qǐng)輸入舞會(huì)輪數(shù):\n");
scanf("%d",&n);
printf("請(qǐng)輸入男生人數(shù):\n");
scanf("%d",&m1);
printf("請(qǐng)對(duì)男生進(jìn)行編號(hào):\n");
for (i=1;i<=m1;i++)
{
scanf("%d",&P.base[i]);
Push(P,P.base[i]);
}
printf("請(qǐng)輸入女生人數(shù):\n");
scanf("%d",&m2);
for (i=1;i<=m2;i++)
{
scanf("%d",&Q.base[i]);
Push(Q,Q.base[i]);
}
m=m1
for (i=1;i<=n;i++)
{
printf("第%d輪舞會(huì):\n",i);
for (j=1;j<=m;j++)
{
Pop(P,a);
Pop(Q,b);
printf("%d %d\n",a,b);
}
}
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的舞伴配对问题java_舞伴配对问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: javascript判断图片是否加载完成
- 下一篇: 【集合框架】JDK1.8源码分析Hash