高周波做网站,宝塔一键wordpress,磐石网站建设,wordpress 主题原理许多大学生报名参与大运会志愿者工作。其中运动场引导员需要男女生组队#xff0c;每组一名男生加一名女生#xff0c;男生和女生各自排成一队#xff0c;依次从男队和女队队头各出一人配成小组#xff0c;若两队初始人数不同#xff0c;则较长那一队未配对者调到其他志愿…许多大学生报名参与大运会志愿者工作。其中运动场引导员需要男女生组队每组一名男生加一名女生男生和女生各自排成一队依次从男队和女队队头各出一人配成小组若两队初始人数不同则较长那一队未配对者调到其他志愿者队。现要求写一算法模拟上述配对问题你需要用队列操作实现上述算法。
函数接口定义
Status EnQueue(SqQueue Q,QElemType e);//入队
Status DeQueue(SqQueue Q,QElemType e);//出队
void Partner( int num);//男女配对
其中 Q 代表队列 e代表出队或入队的元素 num为志愿者总人数。
裁判测试程序样例
#includestdio.h
#includestdlib.h
#includemalloc.h
#includeiostream
#includestring
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.baseNULL) return OVERFLOW;Q.frontQ.rear0;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.frontQ.rear) /* 队列空的标志 */return TRUE;elsereturn FALSE;}void Partner( int num) {//num是志愿者总人数InitQueue(Mdancers); //男生队列初始化InitQueue(Fdancers); //女生队列初始化QElemType p;for (int i 0; i num; i) //依次将志愿者根据其性别入队{cinp.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]).sexe.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的格式注意两个输入之间要有空格。