算法设计综合实训题目.docx
《算法设计综合实训题目.docx》由会员分享,可在线阅读,更多相关《算法设计综合实训题目.docx(26页珍藏版)》请在冰豆网上搜索。
算法设计综合实训题目
算法设计综合实训题目
0.逆序数字(借助栈)
编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。
例如,给定数7631,函数返回1367.
输入:
第一行一个正整数T(T<=10),表示有T组测试数据;以下T行,每行一个非负的整数N。
输出:
共T行,对于每组输入数据输出一行,即数字逆序后的结果值。
样本输入:
3
7631
1018
5158
样本输出:
1367
8101
8515
1.人见人爱A+B
这个题目的A和B不是简单的整数,而是两个时间,A和B都是由3个整数组成,分别表示时分秒,比如,假设A为344556,就表示A所表示的时间是34小时45分钟56秒。
输入:
输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。
题目保证所有的数据合法。
输出:
对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:
分和秒的取值范围在0-59),每个输出占一行,并且所有的部分都可以用32位整数表示。
样本输入:
2
123456
344556122334
样本输出:
579
47930
2.敲七
【问题描述】
输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)
【要求】
【数据输入】一个整数N。
(N不大于30000)
【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。
【样例输入】
20
【样例输出】
7
14
17
3.统计同成绩学生人数问题
【问题描述】
读入N名学生的成绩,将获得某一给定分数的学生人数输出。
【要求】
【数据输入】测试输入包含若干测试用例,每个测试用例的格式为
第1行:
N
第2行:
N名学生的成绩,相邻两数字用一个空格间隔。
第3行:
给定分数
当读到N=0时输入结束。
其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
【数据输出】对每个测试用例,将获得给定分数的学生人数输出。
【样例输出】
3
806090
60
2
8566
0
5
6075905575
75
0
【样例输出】
1
0
2
4.高斯日记
大数学家高斯有个好习惯:
无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:
4210。
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。
这或许也是个好习惯,它时时刻刻提醒着主人:
日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:
1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:
5343,因此可算出那天是:
1791年12月15日。
高斯获得博士学位的那天日记上标着:
8113
请你算出高斯获得博士学位的年月日。
5.牛的繁殖问题
有位科学家曾出了这样一道数学题:
有一头母牛,它每年年初要生一头小母牛;每头小母牛从第四个年头起,每年年初也要生一头小母牛。
按此规律,若无牛死亡,第20个年头上共有多少头母牛。
6.最少钱币数问题
【问题描述】
这是一个古老而又经典的问题。
用给定的几种钱币凑成某个钱数,一般而言有多种方式。
例如:
给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。
显然,最少需要2个钱币才能凑成15元。
你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。
【要求】(代码需加注释)
【数据输入】输入可以有多个测试用例。
每个测试用例的第一行是待凑的钱数值M(1<=M<=2000,整数),接着的一行中,第一个整数K(1<=K<=10)表示币种个数,随后是K个互不相同的钱币面值Ki(1<=Ki<=1000)。
输入M=0时结束。
【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。
如果凑钱失败,输出“Impossible”。
你可以假设,每种待凑钱币的数量是无限多的。
【样例输入】
15
625102050100
1
12
0
【样例输出】
2
Impossible
7.运动会分数统计
【任务描述】参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的得分分别为:
7、5、3、2、1,前三名的得分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
【功能要求】
1)可以输入各个项目的前三名或前五名的成绩。
2)能统计各学校总分。
3)可以按学校编号或名称、学校总分、男女团体总分排序输出。
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询。
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称。
【输出形式】有合理的提示,各学校分数为整型。
【界面要求】有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
【存储结构】学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在C/C++语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构。
【测试数据】要求使用
(1)全部合法数据;
(2)整体非法数据;(3)局部非法数据分别进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明。
8.飞机订票系统
任务:
通过此系统可以实现如下功能:
1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)。
2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况。
3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班。
4)退票:
可退票,退票后修改相关数据文件。
客户资料有姓名、证件号、订票数量及航班情况,订单要有编号。
5)修改航班信息:
当航班信息改变时,可以修改航班数据文件。
要求:
根据以上功能说明,设计航班信息、订票信息的存储结构,设计程序完成功能。
9.文章编辑
功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构:
使用线性表,分别用几个子函数实现相应的功能。
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";(3)输出删除某一字符串后的文章。
10.宿舍管理查询软件
问题描述:
为宿舍管理人员编写一个宿舍管理查询软件。
程序设计要求:
(1)采用交互工作方式。
(2)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)。
(3)查询菜单(用二分查找实现以下操作):
按姓名查询、按学号查询、按房号查询。
(4)打印任一查询结果(可以连续操作)。
11.学校超市选址问题(带权有向图的中心点)
设计要求:
对于某一学校超市,其他各单位到其该超市的距离不同,同时各单位人员去超市的频度也不同。
请为超市选址,要求实现总体最优。
12.教学计划编制问题
针对学院的计算机系本科课程,根据课程之间的依赖关系,制定课程安排计划,并满足各学期课程数大致相同。
按照用户输入的课程数、学期数、课程间的先后关系数目以及课程间两两间的先后关系,程序执行后会给出每学期应学的课程。
功能要求:
(1)输入的形式和输入值的范围:
输入间用空格隔开。
要求用户输入的课程数小于20,学期数小于或是等于8,课程名的长度小于等于10个字符。
(2)程序所能达到的功能:
按照用户的输入,给出每学期应学的课程。
(3)测试数据:
输入:
学期数:
5,课程数:
12,课程间的先后关系数:
16,课程的代表值:
v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12。
课程间两两间的先后关系:
v1v2,v1v3,v1v4,v1v12,v2v3,v3v5,v3v7,v3v8,v4v5,v5v7,v6v8,v9v10,v9v11,v9v12,v10v12,v11v6
输出:
第1学期应学的课程:
v1v9
第2学期应学的课程:
v2v4v10v11
第3学期应学的课程:
v3v6v12
第4学期应学的课程:
v5v8
第5学期应学的课程:
v7
13.散列法的实验研究
散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。
两者是影响查询算法性能的关键因素。
对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
14.图书借阅管理系统
主要分为两大功能:
1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书)。
2)会员管理(增加会员、查询会员、删除会员、借书信息)。
15.排序方法时间性能研究
问题描述:
对各种排序方法(直接插入排序、希尔排序、起泡排序、快速排序、直接选择排序、堆排序和归并排序)的时间性能进行比较。
基本要求:
(1)设计并实现上述各种排序算法。
(2)产生随机的初始排列,分别调用上述排序算法,并比较时间性能。
待排序表的表长不小于100。
至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。
(3)统计在完全正序、完全逆序情况下的关键字比较次数和移动次数。
(4)最后对结果作出简单分析,包括对各组数据得出结果波动大小的解释。
16.活期储蓄帐目管理
活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:
1)能比较迅速地找到储户的帐户,以实现存款、取款记账;
2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
17.二叉排序树的实现
用顺序和二叉链表作存储结构
1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排 序树T;
2)对二叉排序树T作中序遍历,输出结果;
3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;
18.最小生成树问题
设计要求:
在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。
存储结构采用多种。
求解算法多种。
19.通讯录的制作
设计目的:
用〈〈数据结构〉〉中的双向链表作数据结构,结合所选语言基本知识。
编写一个通讯录管理系统。
以把所学数据结构知识应用到实际软件开发中去。
设计内容:
本系统应完成一下几方面的功能:
1)输入信息——enter();
2)显示信息———display();
3)查找以姓名作为关键字———search();
4)删除信息———delete();
5)存盘———save();
6)装入———load()