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< // } }