jmu-ds-ダンサーの問題
週末のダンスパーティーで、男性と女性がそれぞれダンスホールに入って、それぞれ列を作ったとします.ダンスが始まると、男性チームと女性チームの頭から一人ずつダンスパートナーになり、両チームの初期人数が異なると、長い未ペアが次のダンス曲を待つ.アルゴリズムを書いて上記のダンサーのペアリング問題をシミュレートする必要があります.キュー操作で上記のアルゴリズムを実装する必要があります.次の5つの関数の操作を完了してください.
関数インタフェースの定義: 説明の入力
まずパーティーに参加する人数を入力し、パーティーに参加する人の名前と性別をそれぞれ入力します.
出力の説明
ペアの男女のダンサーを先に出力し、チームに人が残っている場合は、残りの性別と残りの数を出力します.
審判試験プログラムのサンプル:
サンプルコード:
関数インタフェースの定義:
int QueueLen(SqQueue Q);//
int EnQueue(SqQueue &Q, Person e);//
int QueueEmpty(SqQueue &Q);//
int DeQueue(SqQueue &Q, Person &e);//
void DancePartner(Person dancer[], int num); //
Q
:キューe
:ダンスパーティーに参加した人dancer
:全ダンサーnum
:ダンスパーティーに参加した人数まずパーティーに参加する人数を入力し、パーティーに参加する人の名前と性別をそれぞれ入力します.
出力の説明
ペアの男女のダンサーを先に出力し、チームに人が残っている場合は、残りの性別と残りの数を出力します.
審判試験プログラムのサンプル:
#include
#define MAXQSIZE 100//
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct {
char name[20]; //
char sex; // ,'F' ,'M'
} Person;
//- - - - - - - - - -
typedef struct {
Person data[MAXQSIZE];
int front; //
int rear; //
} Queue;
typedef Queue *SqQueue;
SqQueue Mdancers, Fdancers; //
int InitQueue(SqQueue &Q);
void DestroyQueue(SqQueue &q);
int QueueLen(SqQueue Q);//
int EnQueue(SqQueue &Q, Person e);//
int QueueEmpty(SqQueue &Q);//
int DeQueue(SqQueue &Q, Person &e);//
void DancePartner(Person dancer[], int num); //
int main(){
int i;
int n;
Person dancer[MAXQSIZE];
cin>>n;
for(i=0;i<n;i++) cin>> dancer[i].name >> dancer[i].sex;
InitQueue(Mdancers); //
InitQueue(Fdancers); //
cout << "The dancing partners are:" << endl;
DancePartner(dancer, n);
if (!QueueEmpty(Fdancers)) {
cout << "F:"<<QueueLen(Fdancers) ;
} else if (!QueueEmpty(Mdancers)) {
cout << "M:"<<QueueLen(Mdancers) ;
}
DestroyQueue(Fdancers);
DestroyQueue(Mdancers);
return 0;
}
int InitQueue(SqQueue &Q) {// Q
Q = new Queue; // MAXSIZE
if (!Q->data)
exit( OVERFLOW); //
Q->front = Q->rear = 0; // ,
return OK;
}
void DestroyQueue(SqQueue &q)
{
delete q;
}
/* */
サンプルコード:
/* */
int QueueLen(SqQueue Q)//
{
return Q->rear - Q->front;
}
int EnQueue(SqQueue &Q, Person e)//
{
if(Q->rear >= MAXQSIZE) return 0;
Q->data[Q->rear++] = e;
return 1;
}
int QueueEmpty(SqQueue &Q)//
{
return (Q->front == Q->rear);
}
int DeQueue(SqQueue &Q, Person &e)//
{
if(QueueEmpty(Q)) return 0;
e = Q->data[Q->front++];
return 1;
}
void DancePartner(Person dancer[], int num) //
{
Person male,female,p;
int i;
for(i = 0; i < num; i ++){
p = dancer[i];
if(p.sex == 'F')
EnQueue(Fdancers,p);
else
EnQueue(Mdancers,p);
}
while(QueueLen(Fdancers) != 0 && QueueLen(Mdancers) != 0){
DeQueue(Fdancers,male);
cout<<male.name<<" ";
DeQueue(Mdancers,female);
cout<<female.name <<"
";
}
// if(QueueLen(Fdancers) != 0){
// cout<
// }else if(QueueLen(Mdancers) != 0){
// cout<
// }
}