数据结构 周末舞会(深学思维)

本文指导菜鸟理解并实现了一个模拟舞会舞伴配对的问题,利用队列数据结构解决男士和女士按FIFO原则匹配,通过实例展示了如何使用C++编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

上一期说了数据结构

这一期我们跟着一道题来看一下队列

这篇文章还是是为了帮助一些

像我这样的菜鸟

找到简单的题解

问题描述:

描述

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

输入描述

第1行两个正整数,表示男士人数m和女士人数n,1≤m,n≤1000;

第2行一个正整数,表示舞曲的数目k,k≤1000。

输出描述

共k行,每行两个数,之间用一个空格隔开,表示配对舞伴的序号,男士在前,女士在后。

用例输入 1 

2 4
6

用例输出 1 

1 1
2 2
1 3
2 4
1 1
2 2

问题解析:

看了就知道特别水

思路 

直接两个队列

一个表示男,一个表示女

然后分别入队和出队

就可以了

队列的简介:

队列 queue<>

1、队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点:

(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构;

(2)在队尾添加元素,在队头删除元素。

2、队列的相关概念:

(1)队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头;

(2)入队:队列的插入操作;

(3)出队:队列的删除操作。

3、队列的操作:

(1)入队: 通常命名为push()

(2)出队: 通常命名为pop()

(3)求队列中元素个数

(4)判断队列是否为空

(5)获取队首元素

队列的函数

队列的函数
q.empty();如果队列为空返回true,否则返回false
q.size();返回队列中元素的个数
q.pop();删除队列首元素但不返回其值
q.front();返回队首元素的值,但不删除该元素
q.push();在队尾压入新元素
q.back();返回队列尾元素的值,但不删除该元素

queue队列:相关资料


题目代码:

先写好变量如题

两个队列

int n,i,m,k;//人数 几轮舞蹈
queue<int> x,q;//分别表是男和女的队伍

接下来是输入和编号部分

cin>>n>>m>>k;//读入人数
for(i=1;i<=n;i++) x.push(i);//给每个男舞伴编号
for(i=1;i<=m;i++) q.push(i);//给每个女舞伴编号

写完读入可以直接输出了

while(k--)//循环跳舞轮数
{
	cout<<x.front()<<" "<<q.front()<<endl;//输出当前跳舞者
	x.push(x.front());//已经跳完的男舞伴
	q.push(q.front());//已经跳完的女舞伴
	x.pop();//已经跳完的男舞伴站到队尾
	q.pop();//已经跳完的女舞伴站到队尾
}

完整代码:

#include<bits/stdc++.h>
using namespace std;
int n,i,m,k;//人数 几轮舞蹈
queue<int> x,q;//分别表是男和女的队伍
int main()
{
	cin>>n>>m>>k;//读入人数
	for(i=1;i<=n;i++) x.push(i);//给每个男舞伴编号
	for(i=1;i<=m;i++) q.push(i);//给每个女舞伴编号
	while(k--)//循环跳舞轮数
	{
		cout<<x.front()<<" "<<q.front()<<endl;//输出当前跳舞者
		x.push(x.front());//已经跳完的男舞伴
		q.push(q.front());//已经跳完的女舞伴
		x.pop();//已经跳完的男舞伴站到队尾
		q.pop();//已经跳完的女舞伴站到队尾
	}
	return 0;
}

题目测评:

样例通过

成功AC  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值