采花生问题

1.1 需求分析
1.1.1 题目概要
给一矩阵,按贪心思路最多能采多少花生并在规定时间内返回。
1.1.2 题目要求
给定一块花生田的大小和花生的分布,在限定时间内,小Q最多可以采到多少个花生?只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。
1.1.3 输入/输出格式
(1)输入:输入数据存放在peanut.txt文件中。
第1行数字表示矩阵的行数(M),列数(N),所给定的单位时间(K)
第2行至第M+1行,数字表示的是每个花田下面花生数值(value)
(2)输出
第一行输出的是矩阵的行数(M),列数(N),所要求的单位时间(K)
接下来输出M行,每1行数字表示的是每个花田下面花生数值(value)
最后一行输出的是最多采到了的花生数目(num)
1.2 概要设计
1.2.1 数据结构
使用结构体数组来存储有花生的格子的地址和数值:

typedef struct Node
{int x;//列数int y;//行数int num;//花生数值
}Peanut;

1.2.2 算法描述
① 从文件的第一行读取行、列、单位时间的要求
② 从文件中第2行到最后一行读取数组的数字,如果不为0就存入P数组中
③ 设置qsort函数,排序数组,能够使得数组降序排序
④ 设置O结构体初始数值,s0记录两个数值之间的距离和采摘的单位时间,s1记录回去的时间
⑤ 从P数组第一个开始计算,如果s0+s1小于要求的单位时间,单位时间减少,O结构体变成可满足的序列
⑥ 循环往复,到s0+s1大于要求的单位时间,循环结束,输出采摘的最多的花生。
1.3 详细设计
1.3.1 函数功能
(1)int cmp(const void *a, const void *b);函数功能:cmp是qsort的回调函数,用于比较使用,使得qsort是降序排序。
(2)qsort(P, lenP, sizeof(Peanut), cmp);函数功能,使得输入的数组P,在指定长度(lenP)中,以降序的方式进行排序。

舞会配对问题

2.1 需求分析
2.1.1 题目概要
在化妆舞会上,男士们和女士们各自排成一队从不同的方向进入舞池。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
2.1.2 题目要求
(1)依次从男队和女队的队头上各出一人配成舞伴,显示前三轮配对的男士和女士。
(2)测试数据存放在txt文件中。
2.1.3 输入/输出格式
(1)输入:输入数据存放在dancerA.txt文件中。
第1行数字n表示有n个人参加舞会。
第2行至第n+1行,分别表示这n个人的姓名和性别,M表示男士,F表示女士。
(2)输出
第一行输出“第1轮舞伴是:”。
接下来输出N行,每1行输出对应的舞伴即女士和男士姓名,姓名都左对齐,女士和男士姓名中间空出若干空格。
依次输出第2轮和第3轮舞伴。
2.2 概要设计
2.2.1 数据结构
使用结构体数组来存放参加舞会人员的姓名和性别:

typedef struct
{  char name[20];  //存放姓名,假设每位人员的姓名长度不超过20个字符
char sex;      //sex字符变量存放性别,M表示男士,F表示女士
}Person;

使用到的数据结构队列CirQueue定义如下:

typedef struct
{
int count;          /* 计数器,记录队中元素总数 */
Person dancer[N];
}CirQueue;

定义队列变量Fdancers,用来存放女士信息;队列变量Mdancers用来存放男士信息。
2.2.2 算法描述
① 初始化总队列cirQueue,从文本文件中读取数据到数组dancer中,读取不成功程序结束。
② 初始化男女队列,遍历cirQueue判断男女性别并且分别放入Mdancer、Fdancer队列中
③ 判断男女队列中的最短长度(length),,设置初始计数count进入循环舞伴匹配
④ 每一轮循环中,count数加一,男女队列分别使用count对自己长度进行取余得出每次跳舞的姓名。
⑤ 输出每一轮跳舞的姓名,当count%length为0的时候,一轮跳舞结束
⑥ 结束程序
2.3 详细设计
2.3.1 函数功能
(1)void inputdata(CirQueue *cQ)函数功能:从文本文件中读取数据到数组dancer中,读取不成功程序结束。
(2)void AddPerson(CirQueue *cQ,CirQueue *mQ,CirQueue *fQ)函数功能:把全部数据进行分组,分为男队列和女队列。
(3)void match(CirQueue mQ,CirQueue fQ,int times)函数功能:进行舞伴匹配,得到相应的结果并且输出。
(4)void DancePartners(CirQueue *Q,int times)函数功能:初始化男女数组,从dancer数组中读取舞会人员进行配对输出。

会议安排问题

3.1 需求分析
3.1.1 题目概要
某公司的会议日益增多,以至于全公司唯一的会议室不够用了。现在给出这段时期的会议时间表,要求适当删除一些会议,使得剩余的会议在时间上互不冲突,要求删除的会议最少。
3.1.2 题目要求
(1)输入公司会议的个数、开始时间和结束时间,适当删除一些会议,使得剩余的会议在时间上不冲突且删除的会议最少。
(2)测试数据存放在txt文件中。
3.1.3 输入/输出格式
(1)输入:输入数据存放在meetA.txt文件中。
第1行数字表示有number个会议。
第2行至第number+1行,分别表示这会议的起始时间和结束时间。
(2)输出
第一行输出“会议安排如下:”。
接下来输出answernumber行,每1行输出对应会议的起始时间和结束时间。
最后一行为取消会议个数。
3.2 概要设计
3.2.1 数据结构
使用结构体数组来存放参加舞会人员的姓名和性别:

typedef struct{int start;  //存放开始时间int end;      //结束时间int decide;     //是否安排上
}Time;

3.2.2 算法描述
① 设置data数组存放内容数据。从meetA.txt读取所需要的会议个数number,和各个会议的起始时间和结束时间,把读取的内容存放到data数组中。
② 使用快速排序算法qsort对data数组按照结束时间升序排序。
③ 设置answer数组存放可以进行的会议。遍历data数组,对每个数组进行初始化,使得data数组中的decide都为0。
④ 循环遍历data数组,对data数组中的数值进行比较,当前开始时间比前面的结束时间晚或者就算早但是前面的没有被安排,则设置当前下标的decide为1。
⑤ 循环内,判断当前下标的decide是否为1,为1的时候加入answer数组。
⑥ 循环结束后,输出answer数组,即为安排的会议。
3.3 详细设计
3.3.1 函数功能
(1)void inputdata(Time *data,int *number)函数功能:从文本文件中读取数据到数组data中,读取不成功程序结束。
(2)void printTest(Time *answer,int number,int answernumber)函数功能:打印出结果的会议内容和取消会议的个数。
(3)int Arrange(Time *data,Time *answer,int number)函数功能:实现求出安排的会议,返回能有安排的会议个数。
(4)void ArrangeMeeting(Time *data,Time *answer,int number)函数功能:求出会议的安排结果并且输出结果。

全排列问题

4.1 需求分析
4.1.1 题目概要
以字符串的形式输入要全排列的字符输出1,2,3,4四个数的所有排列方法及排列总数。拓展:输出n(n<=10)个不同的字符的所有排列方法及排列总数。
4.1.2 题目要求
(1)输入要全排列的字符串。
(2)字符要求不相同且字符串长度小于10。
4.1.3 输入/输出格式
(1)输入:
输入要全排列的字符串。
(2)输出
输出全排列的字符串,以六个字符串为一行排列出来
最后一行是全排列的个数。
4.2 概要设计
4.2.1 数据结构
char string[]
4.2.2 算法描述
① 输入字符串,设置total统计方案数
② 定义solve函数,left是排列到第几位的坐标,right是数组的长度。
③ solve先进行left与right判断,如果相同则输出全排列的一种排列方式。
④ solve再进行for循环,交换string[i] 和 string[left] 的位置。
⑤ 在for循环中调用solve函数,但left往后移动一位。
⑥ 将一个有序序列全排列后,恢复原状,防止出现重复的结果。
⑦ 输出函数结果,结束程序
4.3 详细设计
4.3.1 函数功能
(1)solve(char string[],int left,int right,int *total)函数功能:递归函数,能够实现分治求全排列数组。
(2)void swap(char *i,char *j)函数功能:交换char类型的i j字符串的位置

背包装载问题

5.1 需求分析
5.1.1 题目概要
两只背包载重量分别为c1和c2,现有n本书要装入包中,每本书的重量用wi表示,并且满足∑wic1+c2,试找出合理的方法,将这n本书装入背包中。。
5.1.2 题目要求
(1)输入要全排列的字符串。
(2)字符要求不相同且字符串长度小于10。
(3)采用回溯法解决问题
5.1.3 输入/输出格式
(1)输入:
第一行输入bag0,bag1表示两个背包的装载量
第二行输入number表示书的重量
第三行输入book[i]表示number本书分别的重量。
(2)输出
第一行先输出book,后面为number本书的重量
第二行输入c1,后面为是否装入bag0,装入输出1,未装入输出0.
第二行输入c2,后面为是否装入bag1,装入输出1,未装入输出0.
若无解,输出Unsolvable
5.2 概要设计
5.2.1 数据结构

typedef struct{int c1;//记录背包一的实际装载容量int c1num;//记录背包一中书本的实际数量int flag[N];
}answer;

5.2.2 算法描述
① 输入背包容量bag0,bag1,输入书的数量和书的重量。
② 定义remain记录未装入书包的重量,初始化answer结构体用于放置结果。
③ 假设第i本书放入背包一中,remain减去此书的重量,若此书超载,进入④,否则更新背包一的装载重量,并进入递归③放入下一本书。
④ 如果剩余数量和背包一装载重量大于当前结构体的背包一装载重量,若超载则结束本轮递归,否则进入递归放入下一本书,进入③,remain加回第i本书的重量。
⑤ 递归过程中若放完了全部书本表示已经成功,否则不成功。
⑥ 把递归的结果传送给结构体answer,对比递归结果的背包一装入情况,在背包一装的最满的情况下,寻找到背包一书装的最少的情况。
⑦输出放书结果,结束程序。
5.3 详细设计
5.3.1 函数功能
(1)void solve(int cur,int c1num)函数功能:递归函数,记录放入书本的重量和背包一中放入书本的数量。
(2)void bagProblem()函数功能:去找到合理的方法来放置。若有合理的方法则输出合理的方法,没有则输出Unsolvable。

【数据结构】-大二数据结构与算法课程设计实训报告相关推荐

  1. C++课程设计实训报告

                          南阳理工学院·软件学院 课程设计报告 课程名称: C++面向对象程序设计(课程设计) 课题名称: 新生基本信息统计软件 姓    名: 学    号: 专 ...

  2. C++课程设计实训_基于多态书籍信息管理系统的设计与实现、附源码、有过程截图

    C++课程设计实训_基于多态书籍信息管理系统的设计与实现.附源码,有过程截图 书籍信息管理系统的设计与实现(基于多态) 学生姓名: 学 号: 指导老师: 所 在 系: 专 业: 班 级: C++课程设 ...

  3. c语言编程TLC2543AD采集,基于C语言的89C51与TLC2543AD转换器的驱动程序的设计 实训报告...

    电子信息技术综合实训报告 竞赛题名称:基于C语言的89C51与TLC2543AD转换器的驱动程序的设计 队员名称: 评阅人签名:设计思路描述: 设计思路: 硬件部分基于80C51单片机和TLC2543 ...

  4. C语言贪吃蛇大作业总结,c语言贪吃蛇实训报告.doc

    c语言贪吃蛇实训报告 c语言贪吃蛇实训报告 C语言贪吃蛇实验报告 C语言程序设计实训报告 姓 名专 业班 级指导教师 二011年 7 月 14 日 1 1.1 1.2 目录 实训目的和要求 ..... ...

  5. 大二第一学期期末课程设计 2015.12.28

    <数据结构与算法>课程设计教学任务书 --2015-2016(一)   课程设计周数:2周                                                  ...

  6. 大二下学期C++课程设计之cocos2d-x合金弹头

    在大二的一个学期的C++学习中,学到了很多,平时也是用学校的Funcode做了很多作业,总体来说也是收获颇丰.我们的C++老师也是对游戏有自己独特的见解, 课上课下教会了我们很多东西.但作为课程设计来 ...

  7. 智科专业大二时候的python课程设计:亚马逊数据集股票分析

    股票分析课程设计要求:(笔者的实验验收基本都是优) 数据集我免费上传在资料区了! 由于实验是大二时候做并验收的了,一些记忆记得有些模糊,具体处理过程如下: 编程环境:jupyter-lab(anaco ...

  8. android课程设计实训目的,汽车专业实习目的与意义

    实习目的及意义 1.通过生产实习加深对汽车运用与维修专业认识,巩固专业思想,激发学习热情. 2.熟悉汽车修理环境.修理工具.为以后走上工作岗位积累一定的知识与经验. 3.开拓我们的视野,增强专业意识, ...

  9. 博客网页制作基础大二dw作业 web课程设计网页制作 个人网页设计与实现 我的个人博客网页开发

最新文章

  1. 移动端调试利器------微信开源项目
  2. android 之UI 高级控件Adapter(适配器详解)
  3. Jenkins拾遗--第三篇(用户权限管理)
  4. poj-2828 Buy Tickets ***
  5. 51单片机扩展io口实验c语言,【51单片机】普通I/O口模拟SPI口C语言程序
  6. 《scikit-learn》随机森林之回归
  7. [渝粤教育] 泉州师范学院 弦管传奇 古乐南音 参考 资料
  8. 轮询、前后台和多任务系统软件模型区别
  9. 孪生素数问题--nyoj26
  10. 【Virtualbox虚拟机Ubuntu系统安装VBoxGuestAdditions.iso增强包解决办法】
  11. iphone快捷指令蚂蚁森林能量_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰...
  12. 使用Arcmap将WGS84坐标转换成国家大地坐标系2000
  13. 人要是点背!那真是没整
  14. 【Python入门】Python的Dict容器一
  15. php是舍五入,php四舍php四舍五入五入函数 floor函数、ceil函数、round
  16. kibana java_Kibana安装及使用说明
  17. 计算机培训教学准备,计算机教学计划锦集五篇
  18. Percona(MySQL)安装
  19. C# 得到变量的类型
  20. python公园售票小程序(身份证获取简单信息+简单数据分析+简单多线程)

热门文章

  1. Windows下将文件夹下所有的文件名导出成生成TXT文件
  2. [PMP]作业题(一)模拟题错题整理
  3. 计算机考研怎么给老师发邮件,考研复试前,手把手教你怎么给导师发邮件!4点要注意...
  4. Java面试题及答案整理( 2022年 整理版)
  5. 今日金融词汇---存货周转天数
  6. 豆豆趣事[2014年05月]
  7. python将英文翻译为中文_Python使用百度翻译开发平台实现英文翻译为中文功能示例...
  8. 帝国时代2决定版多人游戏服务器维护,帝国时代2决定版联机网络差解决办法
  9. 当生活真的过得很艰难的时候,你是怎么熬过来的?(内容来自知乎,用于自省)...
  10. 软件业自由之神---Richard Stallman