算法设计综合实训题目
- 格式:doc
- 大小:158.50 KB
- 文档页数:40
算法实训题目一、设计一个“21点”纸牌游戏(人机对战模式)。
有关游戏点数计算方式如下:.二、设计一个程序计算运动量和食物摄取量三、单位换算器详见第五章8的前两个题目:再做:这两个是为了做下面这个题目:只有完成8和11,你才能做下面这个:四、【13.3】设计和实现个类,它的对象用于表示多项式。
以下多项式要作为链表实现:a n x n + a n-1x n-1 + … + a0 。
每个节点都包含一个代表x的乘方的int值(x n),以及一个代表相应系数的int值(a n)。
类支持的操作包括加法、减法、乘法和多项式求值。
重载操作符+ , -和*,以便直接用它们执行多项式的加法、减法和乘法运算。
多项式求值作为成员函数实现,它接收int类型的一个参数。
求值成员函数用参数值取代x,执行指定的运算,返回结果值。
提供4个构造函数:一个默认构造函数;一个拷贝构造函数;一个接收单个int类型的参数的构造函数,它生成只有一个常量项的多项式,该常量就是构造函数的参数值;以及一个接收两个int类型的参数的构造函数,它生成只有一个项的多项式,它的系数和指数(例如n)由两个参数指定。
换言之,单参数构造函数生成的多项式实际是一种只由a0构成的简单形式,双参数构造函数生成的多项式稍微复杂一些,它代表a n x n。
提供恰当的析构函数。
提供相应的成员函数来输入和输出多项式。
用户输入一个多项式时,可输入:a n x^n+ a n-1x^n-1+ … + a0但是,如果系数a i等于0 ,用户可省略这一项。
例如以下多项式:3x4 + 7x2 + 5可采取以下形式来输入:3x^4 + 7x^2 + 5也可以采取以下形式来输入:3x^4 + 0x^3 + 7x^2 + 0x^1 + 5如果系数为负,可用减号取代加号,例如:3x^5 - 7x^3 + 2x^l - 8-7x^4 + 5x^2 + 9多项式前的减号(例如第二个例子)只作用于第一个系数,而不是对整个多项式求反。
《算法与程序设计》综合练习一、选择题(本大题共12小题,每小题2分,共24分。
在每小题给出的四个选项中,只有一个符合题目要求)1.在VB应用程序设计中,通常应对________编写程序代码。
()A.所有对象B.窗体C.TimerD.有事件的对象答案 D2.要定义一个可存储数值-7.283的变量,其合适的类型是()A.IntegerB.LongC.SingleD.Boolean答案 C3.一张单据上有一个5位数的号码67□□8,其中百位和十位上的数字看不清楚了,但知道该数能够被78整除,也能被67整除。
设计一个算法求出该号码,下列算法合适的是()A.解析算法B.穷举算法C.递归算法D.查找算法答案 B4.已知三角形的三条边长分别为a.b.c,半周长p=(a+b+c)/2该三角形面积计算公式为s=p(p-a)(p-b)(p-c),计算S的VB语句是()A.s=p(p-a)(p-b)(p-c)B.s=Squ(p(p-a)(p-b)(p-c))C.s=p*(p-a)*(p-b)*(p-c)D.s=Sqr(p*(p-a)*(p-b)*(p-c))答案 D5.表示区间[5,14]的VB表达式是()A.Int(Rnd*5) +10B.Int(Rnd*10) +5C.Int(Rnd*10) +14D.Int(Rnd*14) +5解析Int(Rnd*5) +10的区间为[10,14];Int(Rnd*10) +5的区间为[5,14];Int(Rnd*10) +14的区间为[14,23];Int(Rnd*14) +5的区间为[5,18]。
答案 B6. 某算法流程图如图所示,执行该算法,输出s的结果是()A.0B.8C.10D.15答案 D7.运行如下Visual Basic程序,单击命令按钮Command1,出现如图所示的出错信息。
发生“下标越界”错误时所执行的语句是()Private Sub Command1_Click()Dim a(0 To 5) As IntegerDim i As Integer’①a(0) =1’②For i = 1 To 5a(i) =2 * a(i-1) +1 ’③Next iText1.Text =Str(a(i))’④End SubA.①B.②C.③D.④答案 D8.小王用天平称量的过程如下:先放置100克砝码,砝码偏重;再将砝码改为50克,砝码偏轻;又将砝码改为70克,……通过这种策略,小王很快完成物品称重工作。
算法设计综合实训题目0.逆序数字(借助栈)编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。
例如,给定数7631,函数返回1367.输入:第一行一个正整数T(T<=10),表示有T组测试数据; 以下T行,每行一个非负的整数N。
输出:共T行,对于每组输入数据输出一行,即数字逆序后的结果值。
样本输入:3763110185158样本输出:1367810185151.人见人爱A+B这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
输入:输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。
题目保证所有的数据合法。
输出:对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0-59),每个输出占一行,并且所有的部分都可以用32位整数表示。
样本输入:21 2 3 4 5 634 45 56 12 23 34样本输出:5 7 947 9 302.敲七【问题描述】输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)【要求】【数据输入】一个整数N。
(N不大于30000)【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。
【样例输入】20【样例输出】714173.统计同成绩学生人数问题【问题描述】读入N名学生的成绩,将获得某一给定分数的学生人数输出。
【要求】【数据输入】测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数当读到N=0时输入结束。
其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
数据结构与算法实践练习题目及解答以下是一些数据结构与算法的实践练题目及其解答。
1. 数组相关题目题目一给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的索引。
def twoSum(nums, target):nums_dict = {}for i in range(len(nums)):nums_dict[nums[i]] = i题目二给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
def moveZeroes(nums):count = 0for i in range(len(nums)):if nums[i] != 0:nums[count] = nums[i]count += 1while count < len(nums):nums[count] = 0count += 12. 链表相关题目题目三反转一个单链表。
class ListNode:def __init__(self, val=0, next=None): self.val = valself.next = nextdef reverseList(head):prev = Nonecurr = headwhile curr is not None:next_node = curr.nextcurr.next = prevprev = currcurr = next_nodereturn prev题目四给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
def deleteDuplicates(head):curr = headwhile curr is not None and curr.next is not None:if curr.val == curr.next.val:curr.next = curr.next.nextelse:curr = curr.nextreturn head以上是一些数据结构与算法的实践练习题目及其解答。
综合试题一、选择题1. _________不是算法的基本特征。
A. 可行性B. 长度有限C. 在规定的时间内完成D. 确定性2.在数据结构中,从逻辑上可以把数据结构分成( )A.动态结构和静态结构 B.线性结构和非线性结构C.内部结构和外部结构 D.紧凑结构和非紧凑结构3.计算机算法必须具备()这三个特性。
A.可执行性、可移植性、可扩充性 B. 确定性、有穷性、稳定性C. 可执行性、确定性、有穷性D. 易读性、稳定性、安全性4.下面关于线性表的叙述中,错误的是哪一个?()A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
5.在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()。
A. s->next=p;p->next=s;B. s->next=p->next;p->next=s;C. s->next=p->next;p=s;D. p->next=s;s->next=p6.3个结点可构成( )个不同形态的二叉树A.2B.3C.4D.57.先根序列和中根序列相同的非空二叉树是( )A.任一结点均无右子树的非空二叉树B.根结点无右子树的非空二叉树C.任一结点均无左子树的非空二叉树D.根结点无左子树的非空二叉树8.假设p是指向线性表中第i个数据元素结点的指针,则p->next 是指向第i+1个数据元素结点的指针,若p->data=ai, 则p->next->data=ai+1,那么p->next->next指向的是第()个结点A. iB. i+1C. i+2D. i+39.设栈S的初始状态为空,现有5个元素组成的序列{1,2,3,4,5},对该序列在S栈上依次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈、进栈、进栈、出栈、进栈、出栈、进栈。
算法设计与分析(含编程实践)-随堂练习2023秋华工答案题目1题目:编写一个函数,实现对一个整型数组的排序。
def sort_array(arr):"""对一个整型数组进行排序参数:arr -- 待排序的整型数组返回:排序后的整型数组"""return sorted(arr)题目2题目:编写一个函数,实现对一个字符串进行反转。
def reverse_string(s):"""对一个字符串进行反转参数:s -- 待反转的字符串返回:反转后的字符串"""return s[::-1]题目3题目:编写一个函数,实现计算一个字符串中每个字符出现的次数,并以字典的形式返回。
def count_characters(s):"""计算一个字符串中每个字符出现的次数,并以字典的形式返回参数:s -- 待计算的字符串返回:包含每个字符出现次数的字典"""counts = {}for char in s:if char in counts:counts[char] += 1else:counts[char] = 1return counts题目4题目:编写一个函数,判断一个数是否为素数。
def is_prime(n):"""判断一个数是否为素数参数:n -- 待判断的数返回:如果是素数,返回True;否则,返回False """if n <= 1:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falsereturn True以上是算法设计与分析(含编程实践)-随堂练习2023秋华工的答案。
1、母牛生小牛Problem设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?Input本题有多组数据。
每组数据只有一个整数N,独占一行。
(1≤N≤50)Output对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量Sample Input14520Sample Output1238722、座位调整题目描述:百度办公区里到处摆放着各种各样的零食。
百度人力资源部的调研发现,员工如果可以在自己喜欢的美食旁边工作,工作效率会大大提高。
因此,百度决定进行一次员工座位的大调整。
调整的方法如下:1 .首先将办公区按照各种零食的摆放分成N 个不同的区域。
(例如:可乐区,饼干区,牛奶区等等)。
2 .每个员工对不同的零食区域有不同的喜好程度(喜好程度度的范围为1 — 100 的整数,喜好程度越大表示该员工越希望被调整到相应的零食区域)。
3 .由于每个零食区域可以容纳的员工数量有限,人力资源部希望找到一个最优的调整方案令到总的喜好程度最大。
数据输入:第一行包含两个整数N ,M ,(1<=N ,M<=300 )。
分别表示N 个区域和M 个员工。
第二行是N 个整数构成的数列a ,其中a[i] 表示第i 个区域可以容纳的员工数,(1<=a[i]<=M ,a[1]+a[2]+..+a[N]=M) 。
紧接着是一个M*N 的矩阵P ,P (i ,j )表示第i 个员工对第j 个区域的喜好度。
答案输出:对于每个测试数据,输出可以达到的最大的喜好程度。
输入样例3 31 1 1100 50 25100 50 25100 50 25输出样例175数据解释:此数据只存在一种安排方法,三个员工分别安置在三个区域。
最终的喜好程度为100+50+25=175最优解3、剪刀石头布剪刀石头布N 个小孩正在和你玩一种剪刀石头布游戏。
N 个小孩中有一个是裁判,其余小孩分成三组(不排除某些组没有任何成员的可能性),但是你不知道谁是裁判,也不知道小孩们的分组情况。
算法设计综合实训题目0.逆序数字(借助栈)编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。
例如,给定数7631,函数返回1367.输入:第一行一个正整数T(T<=10),表示有T组测试数据; 以下T 行,每行一个非负的整数N。
输出:共T行,对于每组输入数据输出一行,即数字逆序后的结果值。
样本输入:3763110185158样本输出:1367810185151.人见人爱A+B这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
输入:输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。
题目保证所有的数据合法。
输出:对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0-59),每个输出占一行,并且所有的部分都可以用32位整数表示。
样本输入:21 2 3 4 5 634 45 56 12 23 345 7 947 9 302.敲七【问题描述】输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)【要求】【数据输入】一个整数N。
(N不大于30000)【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。
【样例输入】20【样例输出】714173.统计同成绩学生人数问题【问题描述】读入N名学生的成绩,将获得某一给定分数的学生人数输出。
【要求】【数据输入】测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数当读到N=0时输入结束。
其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
【数据输出】对每个测试用例,将获得给定分数的学生人数输出。
【样例输出】380 60 9060285 66560 75 90 55 7575124.高斯日记大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如: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”。
你可以假设,每种待凑钱币的数量是无限多的。
【样例输入】156 2 5 10 20 50 10011 2【样例输出】2Impossible7. 运动会分数统计【任务描述】参加运动会有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。
课程间两两间的先后关系:v1 v2, v1 v3, v1 v4, v1 v12, v2 v3, v3 v5, v3 v7, v3 v8, v4 v5, v5 v7, v6 v8, v9 v10, v9 v11, v9 v12, v10 v12, v11 v6输出:第1学期应学的课程:v1 v9第2学期应学的课程:v2 v4 v10 v11第3学期应学的课程:v3 v6 v12第4学期应学的课程:v5 v8第5学期应学的课程:v713. 散列法的实验研究散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。
两者是影响查询算法性能的关键因素。
对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
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个城市之间建设网络,只需保证连通即可,求最经济的架设方法。