舞伴配对问题java_舞伴配对问题
循環隊列的應用——舞伴配對問題:在舞會上,男、女各自排成一隊。舞會開始時,依次從男隊和女隊的隊頭各出一人配成舞伴。如果兩隊初始人數不等,則較長的那一隊中未配對者等待下一輪舞曲。假設初始男、女人數及性別已經固定,舞會的輪數從鍵盤輸入。試模擬解決上述舞伴配對問題。要求:從屏幕輸出每一輪舞伴配對名單,如果在該輪有未配對的,能夠從屏幕顯示下一輪第一個出場的未配對者的姓名。
//循環隊列的常用函數
#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) //隊滿處理
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("請輸入舞會輪數:\n");
scanf("%d",&n);
printf("請輸入男生人數:\n");
scanf("%d",&m1);
printf("請對男生進行編號:\n");
for (i=1;i<=m1;i++)
{
scanf("%d",&P.base[i]);
Push(P,P.base[i]);
}
printf("請輸入女生人數:\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輪舞會:\n",i);
for (j=1;j<=m;j++)
{
Pop(P,a);
Pop(Q,b);
printf("%d %d\n",a,b);
}
}
return 0;
}
總結
以上是生活随笔為你收集整理的舞伴配对问题java_舞伴配对问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript判断图片是否加载完成
- 下一篇: 【集合框架】JDK1.8源码分析Hash