使用C语言完成舞伴问题(数据结构)
题目:假定在一舞会上,男士排成一队,女士排成一队。跳舞开始时,依次从男队和女队的队头各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
代码和注释如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Queue { //创建Queue循环队列结构体int Front;int Rear;char elem[100][100];int Queuesize;
};void Creat_Queue(Queue &Q)
{//建立一个队列 int n, i;Q.Front = Q.Rear = 0; //定义初始队头队尾指向while(1){printf("请输入跳舞人数:");scanf("%d", &n); if(n<100) break;else printf("输入人数错误,请重新输入"); }Q.Queuesize = n + 1; printf("请输入各跳舞人名:");for (i = 0; i < n; i++)scanf("%s", Q.elem[i]);Q.Rear = n; //rear指向最后一位
}int QueueEmpty(Queue Q)
{ //判断队列是否为空,空返回1,非空返回0if (Q.Front == Q.Rear)return 1;elsereturn 0;
}void PutQueue(Queue &Q, char *str) { //出队列 int l = strlen(str);for (int i = 0; i <= l; i++){Q.elem[Q.Rear][i] = str[i]; //每跳完一个便插入队尾 }Q.Rear = (Q.Rear + 1) % Q.Queuesize; //队尾指针后移一位
}// 比较两个字符串相同,要让字符串每一位都相同
bool is_Same(char s1[], char s2[])
{int l1 = strlen(s1), l2 = strlen(s2); //字符串的长度if (l1 != l2) //长度不同就肯定不同return false;for (int i = 0; i <= l1 ; i++){if (s1[i] != s2[i]) //有一位不同就肯定不同return false;} return true;
}int min(int a, int b)
{if (a < b)return a;return b;
}int Judge_Queue(Queue &M, Queue &W) //人数少的确定舞曲的轮数
{int k1 = 0, k, m = 0;char man[100], wuman[100]; //需要计算的男女各一名printf("请输入需要配对的人:");printf("男:");scanf("%s", man);printf("女:");scanf("%s", wuman);printf("您希望他们这是第几次互相跳舞");scanf("%d", &k);while (k1 < k) // 如果一块跳舞的次数少于k次就继续循环{int m_size = (M.Queuesize-1) ;// 男士的人数int w_size = (W.Queuesize-1) ;// 女士的人数int dance_size = min(m_size, w_size); //一支舞曲去跳舞的人数for (int i = 1; i <= dance_size; i++) // 从队头开始模拟跳舞{// printf("%s %s\n", M.elem[M.Front], W.elem[W.Front]);if (is_Same(man, M.elem[M.Front]) && is_Same(wuman, W.elem[W.Front]))//这支舞曲第i个出场的男士和女士 { //如果和我们指定的两个人相同那么一块跳舞的次数+1k1 = k1 + 1;}//跳完之后要按照顺序插入到队尾,舞者重新排序PutQueue(M, M.elem[M.Front]);PutQueue(W, W.elem[W.Front]);//出队M.Front = (M.Front + 1) % M.Queuesize; //头指针后移,出队 W.Front = (W.Front + 1) % W.Queuesize;}m = m + 1;//printf("!!!"); if((M.Queuesize+1)*(W.Queuesize+1)<m && k1==0) {printf("错误,这两个人永远不能配对"); return 0; } } return m;
}int main()
{Queue M, W;printf("男队:\n");Creat_Queue(M);printf("女队:\n");Creat_Queue(W);printf("发生在第%d轮舞曲", Judge_Queue(M, W));return 0;
}
测试数据:
男:1,2,3,4
女:a,b,c
使男生2和女生b配对
这是他们第4次配对
结果:16
使用C语言完成舞伴问题(数据结构)相关推荐
- 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)
舞伴问题是这样的:有 n 个男孩与 n 个女孩参加舞会,每个男孩和女孩均交给主持一个名单,写上他(她)中意的舞伴名字.无论男孩还是女孩,提交给主持人的名单都是按照偏爱程度排序的,排在前面的都是他们最中 ...
- vector 赋值_从零开始学习R语言(一)——数据结构之“向量”(Vector)
本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/59688569 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...
- 数据结构c语言课程设计报告,(数据结构c语言课程设计报告.doc
(数据结构c语言课程设计报告 数据结构 课程设计报告 设计题目:迷宫求解 专 业 机电一体化 班 级 08专接本 学 生 学 号 104910252011 指导教师 高在村 完成时间 2011. 5 ...
- C语言函数及复杂数据结构的综合应用——简单户籍管理系统
最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...
- 速算C语言程序设计,C语言速算24数据结构课程设计最终版(备份存档)
<C语言速算24数据结构课程设计.doc>由会员分享,可免费在线阅读全文,更多与<C语言速算24数据结构课程设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com ...
- C语言栈顺序存储的数据结构
typedef int SElemType ; typedef struct{SElemType data [ MAXSIZE ];int top ; } SqStack , * SqtackPtr ...
- 24速算c语言实训报告ppt,C语言速算24数据结构课程设计.doc
C语言速算24数据结构课程设计.doc 课程设计论文题 目 名 称 速算 24 课 程 名 称 数据结构课程设计 学 生 姓 名 王浩明 学 号 0941301253 系 .专 业 信息工程系.信息类 ...
- 【数据结构与算法——C语言版】1. 数据结构与算法简介
概念 数据结构:"一组数据的存储结构" 算法:"操作数据的一组方法" 数据结构是为算法服务的,算法是要作用再特定的数据结构上的. 简言之,在编程实践中,我们可能 ...
- c语言 静态链表插入排序,数据结构C语言版 表插入排序
西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...
最新文章
- 关于django 如何实现简单api的restful 接口
- R假设检验之Durbin-Watson检验(Durbin-Watson Test)
- 函数式 vs 指令式
- perl语言入门第七版中文_网站编程语言的选择
- 一些有趣的三方开源库
- 扩展欧几里得学习笔记
- 2019 .NET China Conf之我逛魔都
- 第十三章 数据库支持
- 大数据新手之路二:安装Flume
- 通过Web方式登录USG6000V
- 给技术型创业者的几点建议
- JAVA提取字符串信息中的数字(包括整数,小数)工具类
- Java中CountDownLatch的使用和求多线程的运行时间
- Typora 官网下载
- 高通modem启动过程_高通8953启动流程【转】
- pluck()取表中一列中所有值组成数组
- 粉笔公考——判断推理
- 三、实现LED花样流水
- Web前端——HTML中的超链接
- 程序员当上项目经理的时候!来看看项目经理的素质模型!