周末舞会
1.【问题】
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲只能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
现要求写一个程序,模拟上述舞伴配
【输入格式】
第 1 行两个正整数,表示男士人数 m 和女士人数 n,1≤m,n≤1000;
第 2 行一个正整数,表示舞曲的数目 k,k≤1000。
【输出格式】
共 k 行,每行两个数,之间用一个空格隔开,表示配对舞伴的序号,男士在前,女士在后。
【输入样例】
2 4
6
【输出样例】
1 1
2 2
1 3
2 4
1 1
2 2
2.【问题分析】
1.舞伴配对的顺序符合“先进先出”,
2.用两个队列分别存放男士队伍和女士队伍
3.模拟 k 次配对:每次取各队队头元素“配对”输出,并进行“出队”和重新“入队”操作。
3.1【程序及备注】-queue实现
#include <bits/stdc++.h> using namespace std; int main() { int m,n,k; cin>>m>>n>>k; queue<int> man; queue<int> women; for(int i=1;i<=m;i++) man.push(i); for(int i=1;i<=n;i++) women.push(i); for(int i=1;i<=k;i++) //循环k轮,也就是k首舞曲。 { cout<<man.front()<<" "<<women.front()<<endl; //输出队头,也就是跳舞的人。 int tmpm=man.front(); //记录队头。 int tmpw=women.front(); //同上。 man.pop(); //出队。 women.pop(); //同上。 man.push(tmpm); //使刚才的队头到队尾。 women.push(tmpw); //同上。 } return 0; }
3.2【程序及备注】-数组模拟队列
#include<iostream> using namespace std; const int length=1100; int a[length],b[length]; int main(){ int m,n,k; cin>>m>>n>>k; for(int i=1;i<=m;i++){ a[i] = i; } for(int i=1;i<=n;i++){ b[i] = i; } int appenda=m,appendb=n; for(int i=1;i<=k;i++){ cout<<a[i]<<" "<<b[i]<<endl; appenda++; a[appenda]=a[i]; appendb++; b[appendb]=b[i]; } }
4.【运行结果】

作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号