【题解】周末舞会
【题目描述】
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。
【输入描述】
第一行两队的人数。
第二行舞曲是数目。
【输出描述】
配对情况。
【样例输入】
4 6 7
【样例输出】
1 1 2 2 3 3 4 4 1 5 2 6 3 1
【题目分析】
【参考答案】
#include<bits/stdc++.h> using namespace std; const int N=101; int a[N],b[N]; int main() { int m,n; cin>>m>>n; for(int i=1;i<=m;i++) a[i]=i; for(int i=1;i<=n;i++) b[i]=i; int k,k1=1; int r1=m,r2=n; int f1=1,f2=1; cin>>k; while(k1<=k) { cout<<a[f1]<<" "<<b[f2]<<endl; r1++; r2++; a[r1]=a[f1]; b[r2]=b[f2]; f1++; f2++; k1++; } return 0; }
如果使用队列
#include <iostream> #include <queue> using namespace std; int main() { int m, n, k; cin >> m >> n >> k; queue<int> male, female; // 初始化男队和女队 for (int i = 1; i <= m; i++) { male.push(i); } for (int i = 1; i <= n; i++) { female.push(i); } // 模拟 k 首舞曲 for (int i = 0; i < k; i++) { int man = male.front(); int woman = female.front(); male.pop(); female.pop(); // 输出配对 cout << man << " " << woman << endl; // 重新排到队尾 male.push(man); female.push(woman); } return 0; }