学生搭配问题——C++实现队列
生活随笔
收集整理的這篇文章主要介紹了
学生搭配问题——C++实现队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學生搭配問題
一班有m個女生,有n個男生(m不等于n),現要開一個舞會。男女生分別編號坐在舞池的兩邊的椅子上。每曲開始時,依次從男生和女生中各出一人配對跳舞,本曲沒成功配對者坐著等待下一曲找舞伴。請設計一系統模擬動態地顯示出上述過程,要求如下:(1)輸出每曲配對情況;(2)計算出任何一個男生(編號為X)和任意女生(編號為Y),在第K曲配對跳舞的情況。至少求出K的兩個值;(3)盡量設計出多種算法及程序。提示:用隊列來解決比較方便。
題解:
程序采用簡單菜單驅動方式,通過讓用戶輸入女生數量與男生數量以及歌曲的數量,接著輸入要查找的男生編號與女生編號,界面上就會顯示出每曲配對情況以及計算出任何一個男生(編號為X)和任意女生(編號為Y),在第K曲配對跳舞的情況。
#include <string.h> #include <malloc.h> #include<stdio.h> #include <time.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define MAXSIZE 60 #define TRUE 1 #define FALSE 0typedef int system; typedef struct QNode{int num;struct QNode *next; }QNode,* QueuePtr; //隊列節點 typedef struct{QueuePtr front;QueuePtr rear; }LinkQueue; // 隊列 void sleep( clock_t wait ); //延遲作用 void InitQ(LinkQueue &Q); //初始化隊列函數 void EnQueue(LinkQueue &Q,int num); //入隊列 void DeQueue(LinkQueue &Q, int &num); //出隊列 void printF(LinkQueue &F,int i); //打印第i首曲子時女生情況 void printM(LinkQueue &M,int i); //打印第i首曲子男生情況void EnQueue(LinkQueue &Q,int num) //入隊列 {QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));p->num=num;p->next=NULL;Q.rear->next=p;Q.rear=p; }void DeQueue(LinkQueue &Q, int &num) //出隊列 {QueuePtr p,q;if(Q.front==Q.rear)printf("隊列為空");p=Q.front->next; num=p->num;Q.front->next=p->next;q=p->next;if(Q.rear==q)Q.rear=Q.front;free(p); }void InitQ(LinkQueue &Q) //初始化隊列函數 {QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));Q.front=p;Q.rear=p;Q.front->next=NULL; }void printF(LinkQueue &F,int i) { //打印第i首曲子時女生情況 QueuePtr p;int n=1;while(n<i){printf("_ ");n++;}p=F.front->next;while(F.rear!=p){printf("%d ",p->num);p=p->next;}printf("%d \n",p->num); }void printM(LinkQueue &M,int i) {//打印第i首曲子男生情況QueuePtr p;int n=1;while(n<i){printf("_ ");n++;}p=M.front->next;while(M.rear!=p){printf("%d ",p->num);p=p->next;}printf("%d \n",p->num); }void sleep( clock_t wait ) //延遲作用 {clock_t goal;goal = wait + clock();while( goal > clock() ) ; }//主函數 int main() {int m,n,k,i,a,b;int count=0,num;QueuePtr p,q;LinkQueue F; //女隊列 LinkQueue M; //男隊列 printf("輸入女生數量:");scanf("%d",&m);printf("輸入男生數量:");scanf("%d",&n);printf("輸入歌曲數目:");scanf("%d",&k);printf("輸入要查找的男生編號:");scanf("%d",&a);printf("輸入要查找的女生編號:");scanf("%d",&b);InitQ(F);InitQ(M);for(i=1;i<=m;i++){EnQueue(F,i);}for(i=1;i<=n;i++){EnQueue(M,i);}for(i=1;i<=k;i++){printf("第%d首歌曲 \n",i);printF(F,i);printM(M,i);p=F.front->next;q=M.front->next;printf("此時配對跳舞的是第%d號女生和第%d號男生\n",p->num,q->num);if(p->num==a&&q->num==b){count++;printf("===========================》第%d曲是要查找的指定男女生一起跳舞的歌曲\n",i);}sleep(100);DeQueue(F,num);EnQueue(F,num);DeQueue(M,num);EnQueue(M,num);}return 0; }總結
以上是生活随笔為你收集整理的学生搭配问题——C++实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios textfield 拼音输入 完
- 下一篇: 服务器安装win7系统不停重启,win7