1332:【例2-1】周末舞会
【例1】假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。
跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。
规定每个舞曲能有一对跳舞者。若两队初始人数不相同,
则较长的那一队中未配对者等待下一轮舞曲。
现要求写一个程序,模拟上述舞伴配对问题。
输入:第一行两队的人数
第二行舞曲的数目
【分析】:设计两个队列分别存放男士和女士。
每对跳舞的人一旦跳完后就回到队尾等待下次被选。
如 m=4 n=3 k=6
参考:
一本通 第三部分 数据结构 第二章 队列 1332 :【例2-1】周末舞会 - 内存网
一本通——1332:【例2-1】周末舞会 题解 - 陈晋衍 的博客 - 洛谷博客
1332:【例2-1】周末舞会_weixin_30550271的博客-CSDN博客
https://www.cnblogs.com/lbssxz/p/10740515.html
C++参考代码一:
#include<cstdio>
#include<iostream>
using namespace std;
int a[10001],b[10001],k1=1,k,i,f1=1,r1,f2=1,r2;
/*
【输入样例】
4 6
7
【输出样例】
1 1
2 2
3 3
4 4
1 5
2 6
3 1
*/
int main( void )
{
int m,n;
//输入
//第一行两队的人数;
//第二行舞曲的数目。
cin>>m>>n;
cin>>k;
for (i=1;i<=m;i++) a[i]=i;
for (i=1;i<=n;i++) b[i]=i;
r1=m;
r2=n;
while (k1<=k)
{
printf("%d %d\n",a[f1],b[f2]);
//第一次a[m+1]=a[1]=1,第二次a[m+2]=a[2]=2,如此循环
//将a[f1]出队,并且入队
r1++;
a[r1]=a[f1];
f1++;//出队
//第一次b[n+1]=b[1]=1,第二次b[n+2]=b[2]=2,如此循环。
//b[f2]入队
r2++;
b[r2]=b[f2];
f2++;//出队
//记录舞曲数
k1++;
}
return 0;
}
/*
【输入样例】
4 6
7
【输出样例】
1 1
2 2
3 3
4 4
1 5
2 6
3 1
作业:将此例题用STL的队列重写
*/
C++参考代码二:
#include<iostream>
using namespace std;
int main( void )
{
long long n,m,k;
//输入
//第一行两队的人数;
//第二行舞曲的数目。
cin>>n>>m>>k;
//枚举每一対
for(int i=0;i<k;i++)
{
//输出
cout<<i%n+1<<" "<<i%m+1<<endl;
}
//完美结束
return 0;
}
/*
【输入样例】
4 6
7
【输出样例】
1 1
2 2
3 3
4 4
1 5
2 6
3 1
*/
C++参考代码三:
#include<iostream>
using namespace std;
int main( void )
{
int a,b,c,n=1,m=1;
cin>>a>>b>>c;
for(int i=1;i<=c;i++)
{
if(n==a+1)
n=1;
if(m==b+1)
m=1;
cout<<n++<<' '<<m++<<endl;
}
return 0;
}
信息学奥赛寒假、暑假、国庆十一假期 如何进行集训
信奥书籍推荐之数学篇(2023.02.09)