生活随笔
收集整理的這篇文章主要介紹了
学生舞池分配问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】
一班有m個女生,有n個男生(m不等于n),現要開一個舞會。男女生分別編號坐在舞池的兩邊的椅子上。每曲開始時,依次從男生和女生中各出一人配對跳舞,本曲沒成功配對者坐著等待下一曲找舞伴。
【基本要求】
請設計一系統模擬動態地顯示出上述過程,要求如下:
(1)輸出每曲配對情況;
(2)計算出任何一個男生(編號為X)和任意女生(編號為Y),在第K曲配對跳舞的情況.至少求出K的兩個值;
(3)盡量設計出多種算法及程序。
【算法思想】
用循環隊列來解決,入隊和出隊可分別對應男女各自配對并重新回到座位上。
#include"pch.h"
#include <iostream>
using namespace std
;template <class T>
class seqQueue {
private:T
*data
;int maxSize
;int front
; int rear
;
public:seqQueue(int initsize
);~seqQueue() {front
= rear
= 0;delete[]data
;}void thefrist();void enQueue(T x
);void deQueue(T
&x
);
};
template<class T>
seqQueue
<T
>::seqQueue(int initsize
) { data
= new T
[initsize
];maxSize
= initsize
;front
= rear
= 0;}template<class T>
void seqQueue
<T
>:: thefrist()
{for (int i
= 0; i
< maxSize
- 1; i
++)enQueue(i
);
}
template<class T>
void seqQueue
<T
>:: enQueue(T x
) { data
[rear
] = x
;rear
= (rear
+ 1) % maxSize
;
}template <class T>
void seqQueue
<T
>:: deQueue(T
&x
) { x
= data
[front
];front
= (front
+ 1) % maxSize
;}void thefrist(seqQueue
<int> & a
, int m
);
void exchange(int, int);
void start(int, int);
static int b
= 0, g
= 0;
int song
= 0;int main()
{int b_2
= 0, g_2
= 0;cout
<< "請依次輸入男女生人數:" << endl
;cin
>> b
>> g
;start(b
, g
);cout
<< "請輸入男生和女生的編號:";cin
>> b_2
>> g_2
;while ((b_2
> b
) || (g_2
> g
)) {cout
<< "輸入的編號過大,請重新輸入:";cin
>> b_2
>> g_2
;}exchange(b_2
, g_2
);cout
<< "是否繼續(是請輸入'y',否則請輸入'n'):";
}void thefrist(seqQueue
<int> &Q
, int m
)
{for (int i
= 1; i
<= m
; i
++)Q
.enQueue(i
);
}void start(int b
, int g
) {seqQueue
<int> man(b
+ 1);seqQueue
<int>woman(g
+ 1); thefrist(man
, b
);thefrist(woman
, g
);cout
<< "請輸入將要播放的曲目數\n";cin
>> song
;cout
<< "配對情況如下:\n";for (int i
= 1; i
<= song
; i
++){int x
, y
;man
.deQueue(x
);woman
.deQueue(y
);cout
<< "第" << i
<< "首曲子:" << x
<< "號男生>>>>" << y
<< "號女生" << endl
;man
.enQueue(x
);woman
.enQueue(y
);}
}void exchange(int b_2
, int g_2
)
{int f
= 0;seqQueue
<int>man2(b
+ 1);seqQueue
<int>woman2(g
+ 1);thefrist(man2
, b
);thefrist(woman2
, g
);while (f
<= song
){int x
, y
;f
++;man2
.deQueue(x
);woman2
.deQueue(y
);man2
.enQueue(x
);woman2
.enQueue(y
);if ((x
== b_2
) && (y
== g_2
)){cout
<< "第" << f
<< "首曲:\t" << x
<< "號男生<->" << y
<< "號女生" << endl
;}}if (f
== song
)cout
<< "他們在這個舞會上不可能在一起跳舞" << endl
;
}
總結
以上是生活随笔為你收集整理的学生舞池分配问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。