题目:假定在一舞会上,男士排成一队,女士排成一队。跳舞开始时,依次从男队和女队的队头各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。

代码和注释如下:

#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语言完成舞伴问题(数据结构)相关推荐

  1. 舞伴问题数据结构java_Gale-Shapley算法解决舞伴问题过程详解(C++实现)

    舞伴问题是这样的:有 n 个男孩与 n 个女孩参加舞会,每个男孩和女孩均交给主持一个名单,写上他(她)中意的舞伴名字.无论男孩还是女孩,提交给主持人的名单都是按照偏爱程度排序的,排在前面的都是他们最中 ...

  2. vector 赋值_从零开始学习R语言(一)——数据结构之“向量”(Vector)

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/59688569 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...

  3. 数据结构c语言课程设计报告,(数据结构c语言课程设计报告.doc

    (数据结构c语言课程设计报告 数据结构 课程设计报告 设计题目:迷宫求解 专 业 机电一体化 班 级 08专接本 学 生 学 号 104910252011 指导教师 高在村 完成时间 2011. 5 ...

  4. C语言函数及复杂数据结构的综合应用——简单户籍管理系统

    最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...

  5. 速算C语言程序设计,C语言速算24数据结构课程设计最终版(备份存档)

    <C语言速算24数据结构课程设计.doc>由会员分享,可免费在线阅读全文,更多与<C语言速算24数据结构课程设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com ...

  6. C语言栈顺序存储的数据结构

    typedef int SElemType ; typedef struct{SElemType data [ MAXSIZE ];int top ; } SqStack , * SqtackPtr ...

  7. 24速算c语言实训报告ppt,C语言速算24数据结构课程设计.doc

    C语言速算24数据结构课程设计.doc 课程设计论文题 目 名 称 速算 24 课 程 名 称 数据结构课程设计 学 生 姓 名 王浩明 学 号 0941301253 系 .专 业 信息工程系.信息类 ...

  8. 【数据结构与算法——C语言版】1. 数据结构与算法简介

    概念 数据结构:"一组数据的存储结构" 算法:"操作数据的一组方法" 数据结构是为算法服务的,算法是要作用再特定的数据结构上的. 简言之,在编程实践中,我们可能 ...

  9. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

最新文章

  1. 关于django 如何实现简单api的restful 接口
  2. R假设检验之Durbin-Watson检验(Durbin-Watson Test)
  3. 函数式 vs 指令式
  4. perl语言入门第七版中文_网站编程语言的选择
  5. 一些有趣的三方开源库
  6. 扩展欧几里得学习笔记
  7. 2019 .NET China Conf之我逛魔都
  8. 第十三章 数据库支持
  9. 大数据新手之路二:安装Flume
  10. 通过Web方式登录USG6000V
  11. 给技术型创业者的几点建议
  12. JAVA提取字符串信息中的数字(包括整数,小数)工具类
  13. Java中CountDownLatch的使用和求多线程的运行时间
  14. Typora 官网下载
  15. 高通modem启动过程_高通8953启动流程【转】
  16. pluck()取表中一列中所有值组成数组
  17. 粉笔公考——判断推理
  18. 三、实现LED花样流水
  19. Web前端——HTML中的超链接
  20. 程序员当上项目经理的时候!来看看项目经理的素质模型!

热门文章

  1. 基于模糊控制的Simulink仿真详解
  2. SQL的多条件查询语句
  3. 三星s2 硬刷Android 8,六年老机吃上奥利奥:第三方三星S2安卓8.0刷机包发布
  4. 阿里云服务器能做小程序吗
  5. 基于STM32的智能小车方案设计
  6. MySQL之启动选项
  7. pt-archive使用
  8. 「前端进阶」JS中的内存管理
  9. 生物统计学(biostatistics)学习笔记(四)统计推断(已知样本推总体)
  10. Elasticsearch集群原理、安装和基本使用