青少年编程知识记录 codecoming

【题解】周末舞会

【题目描述】

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。

【输入描述】

第一行两队的人数。

第二行舞曲是数目。

【输出描述】

配对情况。

【样例输入】

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