蒟蒻第一次发题解,有不足的还希望大牛指出。
【冬令营队列】舞会
题目描述
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,每跳完一曲即回各自队尾继续等待。规定每个舞曲只能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。
输入
第一行男士人数m和女士人数n(m <= 1000, n <= 1000);
第二行舞曲的数目k(k <= 1000)。
样例
输入:
2 4
6
输出:
1 1
2 2
1 3
2 4
1 1
2 2
这是一道非常基本的队列问题。
什么叫做队列?
举个栗子:就像去食堂打饭,先去的人总会是先打完,也是先出来的。(除了插队以外QAQ)
总结:队列特点:先进先出。
队列的好处
虽然可以用数组来模拟,但是队列的简洁程度比数组高。
效率也比数组高一点点。
队列的用法
定义一个队列queueq;放入队列:q.push();查看队首q.front();队尾:q.back();弹出:q.pop();
q.empty()=q.size()==0.
那么这道题就非常简单了。只需要输出在2个队列里,在次数以内的每一个队首的值即可。但是不要忘了更新和弹出。
上代码:
code:
这是队列的写法。
#include
using namespace std;
queueq1,q2;
int main(){
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
q1.push(i);
}
for(int i=1;i<=m;i++){
q2.push(i);
}
for(int i=1;i<=k;i++){
cout<
q1.push(q1.front());
q1.pop();
q2.push(q2.front());
q2.pop();
}
return 0;
}
这是数组的写法。
#include
using namespace std;
int m,n,k,a=1,b=1;
int main(){
cin>>m>>n>>k;
for(int i=1;i<=k;i++){
cout<
++a;
++b;
if(am+1) a=1;
if(b
n+1) b=1;
}
return 0;
}
如果觉得《队列Java舞会_stl之队列(舞会) - osc_706v6usl的个人空间 - OSCHINA - 中文开源技术交流社区...》对你有帮助,请点赞、收藏,并留下你的观点哦!