整理电梯调度算法模拟.docx
《整理电梯调度算法模拟.docx》由会员分享,可在线阅读,更多相关《整理电梯调度算法模拟.docx(27页珍藏版)》请在冰豆网上搜索。
整理电梯调度算法模拟
1.电梯调度算法模拟
说明:
电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。
具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。
题目难度:
较难
设计要求:
模拟多人在不同楼层同时要求到各自目的地时电梯的响应顺序,要求使用C语言编程,定义合适的数据结构。
最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。
设计提示:
可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。
把这个结构体数组作为程序的输入,通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。
比如:
当前楼层是4,结构体数组中共有3个人,A:
7→3B:
6→10C:
7→8;
则输出应该是:
当前楼层为6,B进入
当前楼层为7,C进入
当前楼层为8,C出去
当前楼层为10,B出去
当前楼层为7,A进入
当前楼层为3,A出去
2.迷宫求解
说明:
求迷宫从入口到出口的路径,即从迷宫的入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向继续探索,直到所有可能的通路都探索为止。
题目难度:
一般
设计要求:
给出迷宫的入口和出口及相关的通路,求出从入口到出口的路径。
要求使用C语言编程,定义合适的数据结构。
最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。
设计提示:
可以使用一个二维数组来表示迷宫,其中分别用1、0表示通与不通;算法的基本思想是:
若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复,到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”,然后朝“来向”之外的其它方向探索。
若该通道块四周4个方块均“不可通”,则应从“当前路径”中删除该通道块。
使用栈结构记录当前路径,当前位置入栈表示向前行,出栈则表示从当前位置退回。
3.学生运动会成绩数据库
功能:
学生运动会成绩数据库系统记录某校运动会上全部运动项目,各系获得的分数及排名的情况,包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。
进入系统后可以输入和修改某个项目的结果情况,可以按各系院编号输出总分;按总分排序;按男团体总分排序;按系院编号查询;按项目编号查询;按女团体总分排序。
分步实施:
1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2)完成最低要求:
建立一个文件,包括某个系,5个项目的得分情况,能对文件中的信息进行扩充(追加),修改和删除;
3)进一步要求:
完成对多个系,多个项目的得分排序,以及完成系统查询功能。
有兴趣的同学可以自己扩充系统功能。
键盘输入:
系院数目,男子项目数女子项目数,(每项目取前三名,分别为10,5,2分)
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
4.哈夫曼树应用
功能:
1.从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;
2.利用已经建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中,并输出结果,将文件CodeFile以紧凑格式先是在终端上,每行50个代码。
同时将此字符形式的编码文件写入文件CodePrint中。
3.利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中,并输出结果。
分步实施:
1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2)完成最低要求:
完成功能1;
3)进一步要求:
完成功能2和3。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
5.图的遍历
功能:
实现图的深度优先,广度优先遍历算法,并输出原图结构及遍历结果。
分步实施:
1)初步完成总体设计,搭好框架;
2)完成最低要求:
两种必须都要实现,写出画图的思路;
3)进一步要求:
画出图的结构,有兴趣的同学可以进一步改进图的效果。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
6.n维矩阵乘法:
AB-1
功能:
设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,
输出ab-1结果。
分步实施:
1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2)完成最低要求:
建立一个文件,可完成2维矩阵的情况;
3)一步要求:
通过键盘输入维数n。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
7.数组应用
功能:
按照行优先顺序将输入的数据建成4维数组,再按照列优先顺序输出结果,给出任意处的元素值,并给出对应的一维数组中的序号。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
完成第一个功能;
3.进一步要求:
进一步完成后续功能。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
8.数组应用2
功能:
读入数组下标,求出数组A靠边元素之和;求从A[0][0]开始的互不相邻的各元素之和;当m=n时,分别求两条对角线上的元素之和,否则打印出m!
=n的信息。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
求出2维数组的功能;
3.进一步要求:
完成3维以上数组的功能。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
9.n元多项式乘法
功能:
完成两个n元多项式作乘法,给出明确的等式形式。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,实现两个一元二次多项式作乘法。
3.进一步要求:
实现三元二次多项式的乘法。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
10.集合运算
功能:
使用链表来表示集合,完成集合的合并,求交集等操作。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
3.进一步要求:
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
6)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
11.公园的导游图
功能:
给出一张某公园的导游图,游客通过终端询问可知:
从某一景点到另一景点的最短路径。
游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览各景点,最后回到出口(出口就在入口旁边)。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括5个景点情况,能完成遍历功能;
3.进一步要求:
进一步扩充景点数目,画出景点图,有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
12.商店存货管理系统
功能:
建立一商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括5个种类的货物情况,能对商品信息进行扩充(追加),修改和删除以及简单的排序;
3.进一步要求:
扩充商品数量,以及完成系统查询功能。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
13.汉诺威塔
功能:
编程序显示n(n<=9)层汉诺威塔的调整过程。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
实现5层汉诺威塔的调整过程;
3.进一步要求:
直至实现n=9时的情况。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
14.个人帐簿管理系统设计
功能:
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3.进一步要求:
完成对每月的开支排序,以及完成系统查询功能。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
15.排序系统设计
功能:
设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。
开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。
如此下去,直到所有人全部出列为止。
令n最大值取30。
要求设计一个程序模拟此过程,求出出列编号序列。
分步实施:
4.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
5.完成最低要求:
建立一个文件,包括某人5个人的情况。
6.进一步要求:
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
16.
用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:
“THISPROGRAMISMYFAVORITE”
字符
ABCDEFGHIJKLM
频度
6413223210321154757153220
字符
NOPQRSTUVWXYZ
频度
5763151485180238181161
17.分词算法----正向最大匹配分词算法
说明:
何为分词?
中文分词与其他的分词又有什么不同呢?
分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段可以通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,但是在词这一层上,中文比之英文要复杂的多、困难的多。
正向最大匹配分词算法就是从左到右进行切词,以最大词组进行匹配。
例如:
“中华人民共和国成立了。
”这个词可以切分为“中华/人民/共和国/成立/了。
”也可以切分成“中华人民共和国/成立/了。
”而后一种就是最大正向匹配算法了。
题目难度:
一般
设计要求:
利用VC++、JAVA之类有界面的编程工具进行编写。
要求输入一篇文章,在一定的时间之内进行分词,并显示分词时间。
并根据分词效果,提出改进方案。
设计提示:
词组数据库由教师给出,学生也可以自己添加词汇,学生建立数据的连接,并进行分词匹配。
18.野人过河问题
说明:
野人过河问题属于人工智能学科中的一个经典问题,问题描述如下:
有三个僧人和野人准备渡过一条河,但是只有一条船,而且船每次最多可以载两个人。
现在他同在河的一边,想渡过河去,条件是:
在河的任何一边必须保证僧人的数目大于等于野人的数目,否则野人就会把僧人吃掉,请给出渡河方案。
题目难度:
较难
设计要求:
模拟僧人和野人的渡河顺序,要求使用C语言编程,定义合适的数据结构。
最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。
设计提示:
先分析问题的初始状态和目标状态,假设河分为甲岸和乙岸:
初始状态:
甲岸,3野人,3牧师;
乙岸,0野人,0牧师;
船停在甲岸,船上有0个人;
目标状态:
甲岸,0野人,0牧师;
乙岸,3野人,3牧师;
船停在乙岸,船上有0个人;
整个问题就抽象成了怎样从初始状态经中间的一系列状态达到目标状态。
问题状态的改变是通过划船渡河来引发的。
考虑用什么样的数据结构和搜索算法
19.运动会统计问题
说明:
参加运动会的n个学校编号为1~n。
比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。
由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2(假设编号为奇数的项目取前五名,编号为偶数的项目取前三名)。
写一个统计程序产生各种成绩单和得分报表。
题目难度:
一般
设计要求:
要求使用用C语言编程实现,定义合适的数据结构。
最后,需要说明设计思想,同时给出能够运行的源程序,并给出对应的程序流程图。
完成的具体功能有:
1.可以输入各个项目的前三名或前五名的成绩。
2.产生各学校的成绩单,内容包括学校编号、项目编号、选手姓名、名次、得分。
3.产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。
设计提示:
假设n≤20,m≤30,w≤20,姓名长度不超过20个字符。
每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名和成绩等。
选择一种合适的数据结构实现。
20.人鬼过河问题
河的一边有三个人和三个鬼,河中有一小船,每次最多能乘坐2个人或鬼,而且至少要有一个人或鬼船才能行驶。
请设计一种算法,把人和鬼都送到对岸。
注:
不论是在河边、船上,如果人鬼数量相同,则鬼和人能和谐相处,鬼不吃人,否则,鬼吃掉人。
要求算法能给出整个运送过程,包括每次船行驶的方向(是驶向对岸还是返回),船上的人和鬼数量。
21.循环节(repeatingcycle)
问题描述:
求一个分数对应的十进制小数的循环节。
我们定义一个小数的循环节是它的第一个最短
的向右无限循环的数字串。
下面是一些分数的循环节,循环节部分用括号括住,例如:
分数十进制小数循环节循环节长度(位数)
1/60.1(6)61
5/70.(714285)7142856
1/2500.004(0)01
输入:
输入文件的每行包含两个正整数,第一个为分子,第二个为分母,它们之间用一
个空格隔开,这两个正整数值均不超过3000,输入以00结束。
输出:
输出到屏幕。
对应输入的每一行,有两行输出,其中第一行输出一个分数和它的
小数表示,其中小数由非循环节部分加上第一个出现的循环节或者不大于50位的小数,
第二行输出整个循环节的长度,如小数超过50位仍未出现循环节则认为循环节长度为0。
输入样例:
输出样例:
161/6=0.1(6)
571
12505/7=0.(714285)
006
1/250=0.004(0)
1
22.拼字游戏(wordcrosses)
拼字游戏历史悠久,能锻炼人的思维和提高单词记忆量。
在欧美报纸的版面中经常会见
到。
本题只是简单地演示单组交叉词。
所谓单组交叉词,是指两个单词交叉放置,一个
水平放置,另一个垂直放置,交叉点是两个单词都共用一个字母,而且交叉点遵循交叉
靠前原则,即这公用的字母尽量在水平单词的前方,然后也尽量在垂直单词的上方。
例
如:
DEFER,PREFECT(前一个为水平单词)的交叉点是E,而PREFECT,EDFER的交叉点是
R。
双交叉词是指有两组单组交叉词,它们的水平单词放在同一行。
试编程将输入的每四个一组的单词尽可能组成双交叉词。
输入:
输入文件由若干行组成,每行有四个单词,按顺序每两个为一组,每组第一个单
词为水平单词,每个单词由1到10个大写字母组成,单词之间用一个空格隔开。
最后一行
由一个"#"结束。
输出:
输出文件由一系列双交叉词组成,每个水平单词之间隔三个空格。
若不能构成双
交叉词,则显示"Unabletomaketwocrosses"。
每组双交叉词间空一行。
输入样例:
ATPARTRIGHTBUT
PEANUTBANANAVACUUMGREEDY
#
输出样例:
B
PU
ATRIGHT
R
T
Unabletomaketwocrosses
23.校园导游咨询(为来访的客人提供各种信息服务)
1、基本要求:
1)设计大学城平面图,在校园景点选10个左右景点。
以图中顶点表示大学城内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。
2)为来访客人提供图中任意景点相关信息的查询。
3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。
实现提示:
一般情况下,校园的道路是双向通行的,可设计校园平面图是一个无向网。
顶点和边均含有相关信息。
24.十进制数与八进制数互换的实现
要求:
采用相应的数据结构,实现十进制数到八进制数的转换.
25.大整数乘法的实现
要求:
以数组这种数据结构来实现,整数最大允许的长度为80位.
26.较难模拟一种掷骰子游戏
有这样一种游戏:
4个人(A-D),每个人有4个骰子,各自在一个筒中摇匀后停止。
每个人可以看到自己此时4个骰子的点数。
由A开始,根据自己骰子点数估计某个点数的总个数,报两个数字:
骰子个数和点数,如“4个3”,然后等待下家B报数;B报出的数字中,骰子个数只能大于上家;如此重复;最后当某个人不再报数而叫“停”时,4人均打开摇筒。
如果个数和点数恰与叫停者的上家所报相符,则上家胜;如果不相符,则叫停者胜。
如果无人叫停,则继续报数直至报出的数字为“16个6”时结束。
用C语言编程模拟这个过程。
报数的步骤可由用户输入数据进行模拟。
注:
骰子,亦称色子,即一个质地均匀的正六面体,每面分别标有数字1-6,在游戏中用于产生区间[1,6]内的随机整数。
27.较易行人过街红绿灯的手动控制
城市非繁华街道上有一种由行人手动控制的过街红绿灯。
无行人穿过马路时行人指示为红灯,汽车指示为绿灯,汽车能够连续地正常通过(A状态)。
当有人按下手动开关时,一段时间后(注*)行人指示为绿灯,汽车指示为红灯,汽车不能通过而行人能够穿过马路(B状态),且B状态只能持续一个指定的时间段。
注*:
当汽车连续通过(A状态)的时间已超过某个给定的值,则按下开关后立即切换到B状态;如果按下开关时A状态时间未达到给定值,则必须等待一定时间后才能切换到B状态,这个时间的长度可事先设定。
编程模拟这种红绿灯的控制。
28.循环赛日程表
说明:
设计一个满足以下要求的比赛日程表:
(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能赛一次;
(3)循环赛一共进行n-1天。
题目难度:
一般
设计要求:
请使用C语言编程,设计一个有效的算法解决循环赛日程表问题。
设计提示:
按分治策略,将所有的选手分为两半,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。
递归地用对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。
这时只要让这2个选手进行比赛就可以了。
29.多边形游戏
说明:
多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。
每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。
所有边依次用整数从1到n编号。
游戏第1步,将一条边删除。
随后n-1步按以下方式操作:
(1)选择一条边E以及由E连接着的2个顶点V1和V2;
(2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。
将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点。
最后,所有边都被删除,游戏结束。
游戏的得分就是所剩顶点上的整数值。
题目难度:
较难
设计要求:
请使用C语言编程,设计一个有效的算法解决下述问题:
对于给定的多边形,计算最高得分。
设计提示:
在所给多边形中,从顶点i(1≤i≤n)开始,长度为j(链中有j个顶点)的顺时针链p(i,j)可表示为v[i],op[i+1],…,v[i+j-1]。
如果这条链的最后一次合并运算在op[i+s]处发生(1≤s≤j-1),则可在op[i+s]处将链分割为2个子链p(i,s)和p(i+s,j-s)。
设m1是对子链p(i,s)的任意一种合并方式得到的值,而a和b分别是在所有可能的合并中得到的最小值和最大值。
m2是p(i+s,j-s)的任意一种合并方式得到的值,而c和d分别是在所有可能的合并中得到的最小值和最大值。
依此