实用算法配套练习基础题doc.docx
《实用算法配套练习基础题doc.docx》由会员分享,可在线阅读,更多相关《实用算法配套练习基础题doc.docx(20页珍藏版)》请在冰豆网上搜索。
实用算法配套练习基础题doc
实用算法配套练习
第一章基础题
1、陶陶摘苹果
【问题描述】
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。
苹果成熟的时候,陶陶就会跑去摘
苹果。
陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她
能够摘到的苹果的数目。
假设她碰到苹果,苹果就会掉下来。
【输入文件】
输入文件apple.in。
第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分
别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第二行只包括一个100到120之
间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
【输出文件】
输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
【样例输入】
100200150140129134167198200111
110
【样例输出】
5
2、不高兴的津津(unhappy.pas)
【问题描述】
津津上初中了。
妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的
各科复习班。
另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。
但是津津如果一天上课超过八个小时就会
不高兴,而且上得越久就会越不高兴。
假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二
天。
请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
【输入文件】
输入文件unhappy.in包括七行数据,分别表示周一到周日的日程安排。
每行包括两个小于10的非负
整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
【输出文件】
输出文件unhappy.out包括一行,这一行只包含一个数字。
如果不会不高兴则输出0,如果会则输出
最不高兴的是周几(用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。
如果有
两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
【样例输入】
53
62
72
53
54
04
06
【样例输出】
3
2
3、津津的储蓄计划(save.pas)
【问题描述】
津津的零花钱一直都是自己管理。
每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并
且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年__________末她会加上20%
还给津津。
因此津津制定了一个储蓄计划:
每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个
月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如11月初津津手中还有83元,妈妈给了津津300元。
津津预计11月的花销是180元,那么她就
会在妈妈那里存200元,自己留下183元。
到了11月月末,津津手中会剩下3元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。
有可能在某个月的月
初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。
如果出现这种情况,津津将不得不在
这个月省吃俭用,压缩预算。
现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。
如果不会,计算到
2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。
【输入文件】
输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的
预算。
【输出文件】
输出文件save.out包括一行,这一行只包含一个整数。
如果储蓄计划实施过程中出现某个月钱不够用
的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。
【样例输入1】
290
230
280
200
300
170
340
50
90
80
200
60
【样例输出1】
-7
【样例输入2】
290
230
280
200
300
170
330
50
3
90
80
200
60
【样例输出2】
1580
4、校门外的树
【问题描述】
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。
我们可以把马路看成
一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,
都种有一棵树。
由于马路上有一些区域要用来建地铁。
这些区域用它们在数轴上的起始点和终止点表示。
已知任一区
域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。
现在要把这些区域中的树(包括区域
端点处的两棵树)移走。
你的任务是计算将这些树都移走后,马路上还有多少棵树。
【输入文件】
输入文件tree.in的第一行有两个整数L(1<=L<=10000)和M(1<=M<=100),L代表马路的长
度,M代表区域的数目,L和M之间用一个空格隔开。
接下来的M行每行包含两个不同的整数,用一个空
格隔开,表示一个区域的起始点和终止点的坐标。
【输出文件】
输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
【样例输入】
5003
150300
100200
470471
【样例输出】
298
5、灯的开关状态(Switch.pas)
【问题描述】
有N个灯放在一排,从1到N依次顺序编号。
有N个人也从1到N依次编号。
1号将灯全部关闭,2
将凡是2的倍数的灯打开;3号将凡是3的倍数的灯作相反处理(该灯如为打开的,则将它关闭;如关闭
的,则将它打开)。
以后的人都和3号一样,将凡是自己编号倍数的灯作相反处理。
编程实现:
第N个人操作后,按顺序输出灯的状态。
(1-表示灯打开,0-表示灯关闭)
【输入格式】
输入:
n,灯的个数
【输出格式】
输出:
灯的状态,01序列,中间无空格。
【输入样例】Switch.in
2
【输出样例】Switch.out
01
4
6、谁拿了最多奖学金
问题描述】
某校的惯例是在每学期的期末考试之后发放奖学金。
发放的奖学金共有五种,获取的条件各自不同:
1)院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上
论文的学生均可获得;
2)五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)
的学生均可获得;
3)成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
4)西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
5)班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。
例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得
五四奖学金和班级贡献奖,奖金总数是4850元。
现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学
金的条件)。
【输入文件】
输入文件scholar.in的第一行是一个整数N(1<=N<=100),表示学生的总数。
接下来的N行每行是
一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省
份学生,以及发表的论文数。
姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末
平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份
学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。
每两
个相邻数据项之间用一个空格分隔。
【输出文件】
输出文件scholar.out包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金
总数。
如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。
第三行是这N个学生获得的奖学金的总数。
【样例输入】
4
YaoLin8782YN0
ChenRuiyi8878NY1
LiXin9288NN0
ZhangQin8387YN1
【样例输出】
ChenRuiyi
9000
28700
7、阶乘和
【问题描述】
已知正整数N(N<=100),设S=1!
+2!
+3!
+...N!
。
其中"!
"表示阶乘,即N!
=1*2*3*……*(N-1)*N,
如:
3!
=1*2*3=6。
请编程实现:
输入正整数N,输出计算结果S的值。
【输入样例】sum.in
4
【输出样例】sum.out
33
5
8、放球(Ball.pas)
【问题描述】
把m个球放入编号为0,1,2,…,k-1的k个盒中(m<2k)要求第i个盒内必须放2i只球。
如果无法
满足这一条件,就一个不放,求出放球的具体方案。
【输入样例】Ball.in
5
【输出样例】Ball.out
0:
1
1:
0
2:
4
9、角谷猜想(Tran.pas)
【问题描述】
在数学上,有一个称为角谷猜想(最早由日本数学家角谷静夫提出)的经典题,其内容是:
“对任意的正整
数n,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。
经过如此有限次运算后,总可以得到正整
数值1”。
请你编一个程序,根据输入的正整数n,输出以上运算过程。
【输入格式】
输入数据仅一行包含一个正整数n(2≤n≤100)。
【输出格式】
一行输出一次运算的算式,算式中除了运算符号、等号及数字以外不包含其它任何字
符。
【输入样例】train.in
3
【输出样例】train.out
3*3+1=10
10/2=5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
10、求级数和(SERIES.PAS)
【问题描述】
我们让计算机来做一道数学题:
计算S=1/1!
+1/2!
+1/3!
+...+1/N!
(其中N!
=1*2*3*...*N)
【输入格式】
输入整数N(1≤N≤1000)。
【输出格式】
输出S,四舍五入到15位小数。
【输入样例】
3
【输出样例】
S=1.666666666666667
6
11、密码破译(PASSWORD.PAS)
【问题描述】
某组织欲破获一个外星人的密码,密码由一定长度的字串组成。
此组织拥有一些破译此密码的长度不
同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。
现在就请你编程找出能破
译此密码的两个钥匙。
【输入格式】(PASSWORD.IN):
输入文件第一行为钥匙的个数N(1≤N≤5000)
输入文件第二行为密码的长度
以下N行为每个钥匙的长度
【输出格式】(PASSWORD.OUT):
若无法找到破译此密码的钥匙,则输出文件仅1行0。
若找到两把破译的钥匙,则输出文件有两行,分别为两把钥匙的编号。
若有多种破译方案,则只输出一种即可。
【输入样例】PASSWORD.IN
10
80
27
9
4
73
23
68
12
64
92
24
【