软件大赛算法设计练习题目.docx
- 文档编号:30526516
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:26
- 大小:45.67KB
软件大赛算法设计练习题目.docx
《软件大赛算法设计练习题目.docx》由会员分享,可在线阅读,更多相关《软件大赛算法设计练习题目.docx(26页珍藏版)》请在冰豆网上搜索。
软件大赛算法设计练习题目
1、母牛生小牛
Problem
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
Input
本题有多组数据。
每组数据只有一个整数N,独占一行。
(1≤N≤50)
Output
对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量
SampleInput
1
4
5
20
SampleOutput
1
2
3
872
2、座位调整
题目描述:
XX办公区里到处摆放着各种各样的零食。
XX人力资源部的调研发现,员工如果可以在自己喜欢的美食旁边工作,工作效率会大大提高。
因此,XX决定进行一次员工座位的大调整。
调整的方法如下:
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个区域的喜好度。
答案输出:
对于每个测试数据,输出可以达到的最大的喜好程度。
输入样例
33
111
1005025
1005025
1005025
输出样例
175
数据解释:
此数据只存在一种安排方法,三个员工分别安置在三个区域。
最终的喜好程度为100+50+25=175
最优解
3、剪刀石头布
剪刀石头布
N个小孩正在和你玩一种剪刀石头布游戏。
N个小孩中有一个是裁判,其余小孩分成三组(不排除某些组没有任何成员的可能性),但是你不知道谁是裁判,也不知道小孩们的分组情况。
然后,小孩们开始玩剪刀石头布游戏,一共玩M次,每次任意选择两个小孩进行一轮,你会被告知结果,即两个小孩的胜负情况,然而你不会得知小孩具体出的是剪刀、石头还是布。
已知各组的小孩分别只会出一种手势(因而同一组的两个小孩总会是和局),而裁判则每次都会随便选择出一种手势,因此没有人会知道裁判到底会出什么。
请你在M次剪刀石头布游戏结束后,猜猜谁是裁判。
如果你能猜出谁是裁判,请说明最早在第几次游戏结束后你就能够确定谁是裁判。
输入格式:
输入文件包含多组测试数据。
每组测试数据第一行为两个整数N和M(1≤N≤500,0≤M≤2000),分别为小孩的个数和剪刀石头布游戏进行的次数。
接下来M行,每行两个整数且中间以一个符号隔开。
两个整数分别为进行游戏的两个小孩各自的编号,为小于N的非负整数。
符号的可能值为“=”、“>”和“<”,分别表示和局、第一个小孩胜和第二个小孩胜三种情况。
输出格式:
每组测试数据输出一行,若能猜出谁是裁判,则输出身为裁判的小孩的编号,并输出在第几次游戏结束后就能够确定谁是裁判。
如果无法确定谁是裁判,或者发现剪刀石头布游戏的胜负情况不合理(即无论谁是裁判都会出现矛盾),则输出相应的信息。
具体输出格式请参考输出样例。
输入样例
33
0<1
1<2
2<0
35
0<1
0>1
1<2
1>2
0<2
44
0<1
0>1
2<3
2>3
10
输出样例
Cannotdetermine
Player1canbedeterminedtobethejudgeafter4lines
Impossible
Player0canbedeterminedtobethejudgeafter0lines
说明:
共有5个测试数据集,每个测试数据集为一个输入文件,包含多组测试数据。
每个测试数据集从易到难分别为5、10、15、30和40分,对每个测试数据集分别执行一次程序,每次必须在运行时限3秒内结束程序并输出正确的答案才能得分。
所有数据均从标准输入设备(stdin/cin)读入,并写出到标准输出设备(stdout/cout)中。
五个测试数据集中输入N分别不大于20、50、100、200和500,各有10组测试数据。
4、生日蛋糕
Description
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。
设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri,高度为Hi的圆柱。
当i
由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。
令Q=Sπ
请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。
(除Q外,以上所有数据皆为正整数)
Input
有两行,第一行为N(N<=10000),表示待制作的蛋糕的体积为Nπ;第二行为M(M<=20),表示蛋糕的层数为M。
Output
仅一行,是一个正整数S(若无解则S=0)。
SampleInput
100
2
SampleOutput
68
Hint
圆柱公式
体积V=πR2H
侧面积A'=2πRH
底面积A=πR2
5、字符串的距离
Problem
设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为“abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符。
如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我们定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其它任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为O。
在字符串A、B的所有扩展串中,必定存在两个等长的扩展串A1、B1,使得A1与B1之间的距离达到最小,我们将这一距离定义为字符串A、B的距离。
请你写一个程序,求出字符串A、B的距离。
Input
有多组数据,每一组数据第一行为字符串A,第二行为字符串B,A、B均由小写字母组成且长度均不超过2000,第三行为一个整数K,1≤K≤100,表示空格与其它字符的距离。
Output
每组数据一行包含一个整数,表示要求的字符串A、B的距离。
SampleInput
cmc
snmn
2
SampleOutput
10
6、四塔问题
“汉诺塔”,是一个众所周知的古老游戏。
现在我们把问题稍微改变一下:
如果一共有4根柱子,而不是3根,那么至少需要移动盘子多少次,才能把所有的盘子从第1根柱子移动到第4根柱子上呢?
为了编程方便,您只需要输出这个结果mod10000的值。
Input
该题含有多组测试数据,每组一个正整数n。
(0 Output 一个正整数,表示把n个盘子从第1根柱子移动到第4根柱子需要的最少移动次数mod10000的值。 SampleInput 15 SampleOutput 129 7、平方数 给出包含M个数字的列表,和列表中所有数字的所有质因数。 求出最长的子列表,使得子列表中所有数字的乘积是一个完全平方数。 输入 输入文件包含多组测试数据。 第一行包含两个整数N,M(1<=N<=30,1<=M<=30000).N是质因数的个数。 接下来一行有N个整数,给出所有的质因数。 然后一行包含M个整数,给出列表。 输入文件结束于N=M=0. 输出 对于每组数据,输出最长子列表的两个位置坐标lr。 l是该子列表在列表中的起始位置,r是结束位置。 如果多种情况都满足子列表长度最大,输出l最小的一个。 如果不存在这样的子列表输出“None”。 样例输入 34 235 49256 34 235 6633 00 样例输出 13 14 8、跳蚤 Description Z城市居住着很多只跳蚤。 在Z城市周六生活频道有一个娱乐节目。 一只跳蚤将被请上一个高空钢丝的正中央。 钢丝很长,可以看作是无限长。 节目主持人会给该跳蚤发一张卡片。 卡片上写有N+1个自然数。 其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字。 跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度。 而他最终的任务是跳到距离他左边一个单位长度的地方,并捡起位于那里的礼物。 比如当N=2,M=18时,持有卡片(10,15,18)的跳蚤,就可以完成任务: 他可以先向左跳10个单位长度,然后再连向左跳3次,每次15个单位长度,最后再向右连跳3次,每次18个单位长度。 而持有卡片(12,15,18)的跳蚤,则怎么也不可能跳到距他左边一个单位长度的地方。 当确定N和M后,显然一共有M^N张不同的卡片。 现在的问题是,在这所有的卡片中,有多少张可以完成任务。 Input 两个整数N和M(N<=15,M<=100000000)。 Output 可以完成任务的卡片数。 SampleInput 24 SampleOutput 12 Hint 这12张卡片分别是: (1,1,4),(1,2,4),(1,3,4),(1,4,4),(2,1,4),(2,3,4), (3,1,4),(3,2,4),(3,3,4),(3,4,4),(4,1,4),(4,3,4) 9、蛇行矩阵 Problem 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 Input 本题有多组数据,每组数据由一个正整数N组成。 (N不大于100) Output 对于每一组数据,输出一个N行的蛇形矩阵。 两组输出之间不要额外的空行。 矩阵三角中同一行的数字用一个空格分开。 行尾不要多余的空格。 SampleInput 5 SampleOutput 1361015 25914 4813 712 11 10、滑雪 Description Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激。 可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 Michael想知道载一个区域中最长底滑坡。 区域由一个二维数组给出。 数组的每个数字代表点的高度。 下面是一个例子 12345 161718196 152425207 142322218 131211109 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。 在上面的例子中,一条可滑行的滑坡为24-17-16-1。 当然25-24-23-...-3-2-1更长。 事实上,这是最长的一条。 Input 输入的第一行表示区域的行数R和列数C(1<=R,C<=100)。 下面是R行,每行有C个整数,代表高度h,0<=h<=10000。 Output 输出最长区域的长度。 SampleInput 55 12345 161718196 152425207 142322218 131211109 SampleOutput 25 11、采药 【问题描述】 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。 为此,他想拜附近最有威望的医师为师。 医师为了判断他的资质,给他出了一个难题。 医师把他带到一个到处都是草药的山洞里对他说: “孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。 我会给你一段时间,在这段时间里,你可以采到一些草药。 如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。 ” 如果你是辰辰,你能完成这个任务吗? 【输入文件】 输入文件medic.in的第一行有两个整数T(1<=T<=1000)和M(1<=M<=100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。 接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。 【输出文件】 输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。 【样例输入】 703 71100 691 12 【样例输出】 3 【数据规模】 对于30%的数据,M<=10; 对于全部的数据,M<=100。 12、取石子游戏 Description 有两堆石子,数量任意,可以不同。 游戏开始由两个人轮流取石子。 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。 最后把石子全部取完者为胜者。 现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。 Output 输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。 SampleInput 21 84 47 SampleOutput 0 1 0 13、滑雪 Description Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激。 可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 Michael想知道载一个区域中最长底滑坡。 区域由一个二维数组给出。 数组的每个数字代表点的高度。 下面是一个例子 12345 161718196 152425207 142322218 131211109 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。 在上面的例子中,一条可滑行的滑坡为24-17-16-1。 当然25-24-23-...-3-2-1更长。 事实上,这是最长的一条。 Input 输入的第一行表示区域的行数R和列数C(1<=R,C<=100)。 下面是R行,每行有C个整数,代表高度h,0<=h<=10000。 Output 输出最长区域的长度。 SampleInput 55 12345 161718196 152425207 142322218 131211109 SampleOutput 25 14、敲七 Problem 输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...) Input 一个整数N。 (N不大于30000) Output 从小到大排列的不大于N的与7有关的数字,每行一个。 SampleInput 20 SampleOutput 7 14 17 15、埃及分数 Problem 在古埃及,人们使用单位分数的和(形如1/a的,a是自然数)表示一切有理数。 如: 2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。 对于一个分数a/b,表示方法有很多种,但是哪种最好呢? 首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。 如: 19/45=1/3+1/12+1/180 19/45=1/3+1/15+1/45 19/45=1/3+1/18+1/30, 19/45=1/4+1/6+1/180 19/45=1/5+1/6+1/18. 最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。 给出a,b(0〈a〈b〈1000),编程计算最好的表达方式。 Input 第一行: N表示有N组测试数据,每组测试数据为一行包含a,b(0〈a〈b〈1000)。 Output 每组测试数据若干个数,自小到大排列,依次是单位分数的分母。 SampleInput 1 1945 SampleOutput 5618 16、炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。 一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H"表示),也可能是平原(用"P"表示),如下图。 在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域: 沿横向左右各两格,沿纵向上下各两格。 图上其它白色网格均攻击不到。 从图上可见炮兵的攻击范围不受地形的影响。 现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。 Input 第一行包含两个由空格分割开的正整数,分别表示N和M; 接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。 按顺序表示地图中每一行的数据。 N<=100;M<=10。 Output 仅一行,包含一个整数K,表示最多能摆放的炮兵部队的数量。 SampleInput 54 PHPP PPHH PPPP PHPP PHHP SampleOutput 6 18、整数划分问题 整数划分是一个经典的问题。 希望这道题会对你的组合数学的解题能力有所帮助。 Input 每组输入是两个整数n和k。 (1<=n<=50,1<=k<=n) Output 对于每组输入,请输出六行。 第一行: 将n划分成若干正整数之和的划分数。 第二行: 将n划分成k个正整数之和的划分数。 第三行: 将n划分成最大数不超过k的划分数。 第四行: 将n划分成若干奇正整数之和的划分数。 第五行: 将n划分成若干不同整数之和的划分数。 第六行: 打印一个空行。 SampleInput 52 SampleOutput 7 2 3 3 3 Hint: 1、将5划分成若干正整数之和的划分为: 5,4+1,3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1 2、将5划分成2个正整数之和的划分为: 3+2,4+1 3、将5划分成最大数不超过2的划分为: 1+1+1+1+1,1+1+1+2,1+2+2 4、将5划分成若干奇正整数之和的划分为: 5,1+1+3,1+1+1+1+1 5、将5划分成若干不同整数之和的划分为: 5,1+4,2+3 19、谁拿了最多奖学金 Problemdescription 某校的惯例是在每学期的期末考试之后发放奖学金。 发放的奖学金共有五种,获取的条件各自不同: 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元。 现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。 Input 输入的第一行是一个整数N(1<=N<=100),表示学生的总数。 接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。 姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。 每两个相邻数据项之间用一个空格分隔。 Output 输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。 如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。 第三行是这N个学生获得的奖学金的总数。 SampleInput 4 YaoLin8782YN0 ChenRuiyi8878NY1 LiXin9288NN0 ZhangQin8387YN1 SampleOutput ChenRuiyi 9000 28700 20、破解平方数 Problem 给出m个数b1,b2,...,bm,每个数的素数因子都在前t个素数之内,任务是寻找这m个数的非空子集的个数x,使得每个子集的乘积都是一个完全平方数。 例如t=3,则前3个素数为2,3,5。 m=4,这4个数为9,20,500,3,每个数的素因子都是在前3个素数内,则有x=3个非空子集合{9},{20,500},{9,20,500},满足每个集合内的数的乘积是一个完全平方数,输出这样的集合的个数。 Input 每组测试数据的第一行为两个正整数t,m(1≤t≤100,1≤m≤100)第二行为m个数,1<=bi<=109处理至文件结束 Output 每行输出一个整数x,对应每组测试数据 SampleInput 34 9205003 SampleOu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 大赛 算法 设计 练习 题目
![提示](https://static.bdocx.com/images/bang_tan.gif)