2016年算法与数据结构任务书-总论
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法与数据结构课程设计任务书
(2014级计算机科学与技术本科专业)
学生姓名:学号:
班级:2014级计算机科学与技术
题目类型:软件工程(R)指导教师:
一.题目简介
1.扫雷问题。有些个人计算机会带有一个名为Minesweeper的游戏。该游戏界面是一个网
格,网格中的有些方块是雷。编写一个程序以读取文件,该文件中存放着网格中的行数、列数以及网格本身。网格会含有一些标记为o的方块,这些就是雷。其他方块不是雷,将会标记上问号(?)。程序的输出就是输出这个网格。雷依然会标记成o,而那些不含雷的方块会替换成一个数字,以表明邻近雷的个数。最大数字将是8。(4)
例如:
15 5
2?o??? 2 2o211
3o??o? 3 o33o2
4??o?o 4 34o4o
5oo?o? 5 oo4o2
6?o??? 6 3o311
2.求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数
的方法。从建立一个整数2~N的表着手,寻找i˂错误!未找到引用源。的整数,编程实现此算法,并讨论运算时间。(1)
3.方程求解问题。方程A5+B5+C5+D5+E5=F5刚好有一个满足0≤A≤B≤C≤D≤E≤F≤75
的整数解。请编写一个求出该解的程序。(3)
4.最短字符串问题。编写一个程序,从输入中读取字符串,并按长度顺序,最短字符串优
先的原则输出它们。如果有若干字符串具有相同的长度,就按字母顺序输出它们。(3)
5.计算1的个数问题。编写递归程序,返回十进制数N的二进制表示中1的个数。(2)
6.排序重构问题。令A为一个由N个已特殊排序数组成的数列:A1,A2,…,A N,其中
A1=0。令B为N(N-1)/2个数(定义为B ij=A i-A j(i>j))组成的数列。例如,A=0,1,5,8,那么D=1,3,4,5,7,8。请完成:
a)编写程序,根据A构造D;
b)编写程序,构造与D相对应的某一个数列A,注意A不是唯一的。(4)
7.占用网格计算问题。考虑一个N*N的网格,其中某些方格已被占用。如果两个方格共
用公共的边,就说它们属于同一个组,如图示,一组为4个被占用的方格,3组为两个被占用的方格,2个方格被单独占用。假设格子用二维数组来表示。请编写实现下列目的程序:
1)给定组中的某个方格,计算组的大小;
2)计算不同组的数目;
3)列出所有的组。(4)
8.递归替换问题。编写程序,扩展C/C++源文件中的#include指令(以递归的方式)。请以
文件名的内容替换形如下面的代码行。
#include “filename”(3)
9.数据删除问题。编写删除具有N个数据项的数组A中所有重复项的程序,返回A中仍
有的数据项。要求运行时间在O(NlogN)。(2)
10.随机走步问题。以下在x-y坐标系上进行的游戏属于二维的随机行走。从原点(0,0)
开始,每次迭代都是由向左、向上、向右和向下一个单位的随机步构成。当行走者返回原始点时,行走结束。在二维世界这种情况发生的概率为1,而在三维世界概率小于1。
请编写一个进行100次独立随机行走程序,并计算每个方向的步数的平均数。(4)
11.表达式转换问题。请编写一个读取中缀表达式并生成后缀表达式的程序。(2)
12.表达式转换问题。请编写一个读取后缀表达式并生成中缀表达式的程序。(2)
13.课程选修问题。学生需要修一定数量的课程才能毕业,而这些课程会有一些必须遵循的
选修顺序。假设每个学期都开所有课程,并且学生所修课程数量不限制。给出课程和先修课程的列表,求出一个满足最小学期数要求的时间表。以你的专业情况为背景设计。
(3)
14.通过单字符置换可以将一个单词改为另一个单词。假设存在一个5字母单词的字典。给
出一个算法确定单词A是否可以通过一系列的单字符置换转换为单词B,并且如果可以的话,输出相应的单词序列。例如,bleed通过序列bleed、blend、blond、blood转换为blood。(4)
15.编写一个以行为单位的文本编辑器。内部文件的副本被保存成由各个行组成的链表。为
了能在文件中上移或下移,必须维护一个双链表。大部分命令使用只有一个字符的字符串表示。有些是两个字符,并且要求一个参数(或者两个)。(6)
表一,所支持的命令行
16.跳马问题。要求在64个国际象棋格子,任意位置放一个马,如何不重复地把格子走完。(3)
17.八皇后问题。要求编写程序实现将八个皇后放置在国际象棋棋盘的无冲突的位置上的算
法,并给出所有的解。提示:在国际象棋上放置皇后时,任何一个皇后的水平、竖直和斜45º都不能有另一个皇后。解决该问题采用逐次试探的方法,即采用递归调用putchess函数的方法。首先将第一个皇后放于第一行第一列,然后开始向下一行递归。
每一步递归中,首先检测待放置位置是否与已放置的皇后冲突,如不冲突,则进行下一行的放置,否则,选择该行的下一个位置进行检测。如整行的位置都冲突,则回到上一行,重新选择位置。(2)
18.猴子吃桃子问题。有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一
个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1)采用数组数据结构实现上述求解;2)采用链式数据结构实现上述求解;
3)采用递归实现上述求解。(2)
19.病人就医管理模拟问题。编写一个程序定义行医类,反映病人到医院看病,排队看医
生的情况,在病人排队过程中,主要发生两件事:
(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。
要求程序采用菜单方式,其选项及功能说明如下:
(1)排队------输入病人的病历号,加入到病人排队队列中
(2)就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队------从队首到队尾列出所有的排队病人的病历号。
(4)下班---------退出运行。(5)
20.图的基本操作与实现。
(1)自选存储结构,输入含n个顶点(用字符表示顶点)和e条边的图G;
(2)求每个顶点的度,输出结果;
(3)指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列(提示:使用一个栈
实现DFS);
(4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列(提示:使用一个队
列实现BFS);
(5)输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS
遍历(执行操作3);否则输出信息“无x”;
(6)判断图G是否是连通图,输出信息“YES”/“NO”;
(7)如果选用的存储结构是邻接矩阵,则用邻接矩阵的信息生成图G的邻接表,即复制图G,
然再执行操作(2);反之亦然。(4)
21.散列表的设计与实现。设计散列表实现电话号码查找系统。基本要求:(2)
(1)设每个记录有下列数据项:电话号码、用户名、地址;