当前位置: 首页 > news >正文

PTA 6-4 配对问题

许多大学生报名参与大运会志愿者工作。其中运动场引导员需要男女生组队,每组一名男生加一名女生,男生和女生各自排成一队,依次从男队和女队队头各出一人配成小组,若两队初始人数不同,则较长那一队未配对者调到其他志愿者队。现要求写一算法模拟上述配对问题,你需要用队列操作实现上述算法。

函数接口定义:

Status EnQueue(SqQueue &Q,QElemType e);//入队
Status DeQueue(SqQueue &Q,QElemType &e);//出队
void Partner( int num);//男女配对

其中 Q 代表队列, e代表出队或入队的元素; num为志愿者总人数。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<iostream>
#include<string>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define MAX_QSIZE 5typedef struct {char name[20];char sex;
} QElemType;
typedef int Status;
typedef  struct
{  QElemType  *base;int   front;int   rear;
}SqQueue;SqQueue Mdancers, Fdancers; //分别存放男士和女士入队者队列Status InitQueue(SqQueue &Q){ /* 构造一个空队列Q */Q.base=(QElemType  *)malloc(MAX_QSIZE*sizeof(QElemType));if(Q.base==NULL) return OVERFLOW;Q.front=Q.rear=0;return OK;}Status EnQueue(SqQueue &Q,QElemType e)//入队{ /* 插入元素e为Q的新的队尾元素 *///请补充完整return OK;}Status DeQueue(SqQueue &Q,QElemType &e)//出队{ /* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR *///请补充完整return OK;}Status QueueEmpty(SqQueue Q)//判断队空{ /* 若队列Q为空队列,则返回TRUE;否则返回FALSE */if(Q.front==Q.rear) /* 队列空的标志 */return TRUE;elsereturn FALSE;}void Partner( int num) {//num是志愿者总人数InitQueue(Mdancers); //男生队列初始化InitQueue(Fdancers); //女生队列初始化QElemType p;for (int i = 0; i < num; i++) //依次将志愿者根据其性别入队{cin>>p.name >>p.sex;if (p.sex == 'F')______________________; //插入女队elseEnQueue(Mdancers, p); //插入男队}if(QueueEmpty(Fdancers)||QueueEmpty(Mdancers))cout << "配对失败!" << endl;else{    cout << "配对成功小组:" << endl;while (!QueueEmpty(Fdancers) && !QueueEmpty(Mdancers)) {//依次输出男女志愿者的姓名_____________________________; //女生出队cout << p.name << "  "; //输出出队女生姓名____________________________; //男生出队cout << p.name << endl; //输出出队男生姓名}
}
}int main()
{int num;cin>> num;Partner(num);return 0;
}

输入样例:

6
张三 M
李四 F
王五 F
李欣 M
钟中 M
萝莉 M

输出样例:

配对成功小组:
李四  张三
王五  李欣

答案:

#include <cstring>
Status EnQueue(SqQueue &Q, QElemType e) 
{if ((Q.rear + 1) % MAX_QSIZE == Q.front) return ERROR; // 队列满strcpy(Q.base[Q.rear].name,e.name);(Q.base[Q.rear]).sex=e.sex;Q.rear = (Q.rear + 1) % MAX_QSIZE;return OK;
}Status DeQueue(SqQueue &Q, QElemType &e) 
{if (Q.front == Q.rear) return ERROR; // 队列为空e = Q.base[Q.front];Q.front = (Q.front + 1) % MAX_QSIZE;return OK;
}
void Partner(int num) 
{InitQueue(Mdancers); // 男生队列初始化InitQueue(Fdancers); // 女生队列初始化QElemType p;for (int i = 0; i < num; i++) {//cin >> p.name >> p.sex;scanf("%s %c",p.name,&(p.sex));if (p.sex == 'F')EnQueue(Fdancers, p); // 插入女队elseEnQueue(Mdancers, p); // 插入男队}if (QueueEmpty(Fdancers) || QueueEmpty(Mdancers))cout << "配对失败!" << endl;else {cout << "配对成功小组:" << endl;while (!QueueEmpty(Fdancers) && !QueueEmpty(Mdancers)) { // 依次输出男女志愿者的姓名DeQueue(Fdancers, p); // 女生出队printf("%s  ",p.name);//cout << p.name << "  ";DeQueue(Mdancers, p); // 男生出队cout << p.name << endl;}}
}

注意事项:

1.我是用了kimi帮我改正了一下。
2.这里由于是学完c语言再写的,没学c++,所以会显得有点混。
3.出错的主要地方是判空,判满,指针的移动,scanf的格式(注意两个输入之间要有空格)。

相关文章:

  • 如何参与github开源项目并提交PR
  • Linux下环境变量配置出错导致基础命令使用不了的问题解决
  • 抖音分享链接视频下载
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • 手机相册的照片彻底删除了怎么恢复?删除照片恢复的5种方法
  • 甘肃教育杂志社-甘肃教育编辑部
  • CSP俄罗斯方块(简单易懂)
  • C语言笔记21 •模拟atoi函数•
  • conda常见命令
  • 汽车R155法规中,汽车获取到的VTA证书,E后面的数字表示什么意思?
  • MySQL入门学习-查询进阶.别名
  • 携手AI,如何共赢未来?
  • java string类
  • 每日力扣刷题day05(小白简单题)
  • Python游戏编程:一步步用Python打造经典贪吃蛇小游戏
  • Apache Pulsar 2.1 重磅发布
  • emacs初体验
  • HTTP中的ETag在移动客户端的应用
  • java中的hashCode
  • js中的正则表达式入门
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • nfs客户端进程变D,延伸linux的lock
  • node入门
  • Terraform入门 - 1. 安装Terraform
  • Tornado学习笔记(1)
  • TypeScript迭代器
  • 闭包,sync使用细节
  • 每天一个设计模式之命令模式
  • 实战|智能家居行业移动应用性能分析
  • 线性表及其算法(java实现)
  • Android开发者必备:推荐一款助力开发的开源APP
  • postgresql行列转换函数
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​2020 年大前端技术趋势解读
  • # Apache SeaTunnel 究竟是什么?
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • (09)Hive——CTE 公共表达式
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (九)c52学习之旅-定时器
  • (六)Hibernate的二级缓存
  • (转)Unity3DUnity3D在android下调试
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @GlobalLock注解作用与原理解析
  • @PreAuthorize与@Secured注解的区别是什么?
  • @private @protected @public
  • @RequestMapping-占位符映射
  • @RequestParam详解
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)