高级本光盘模拟试题集Word文件下载.docx
《高级本光盘模拟试题集Word文件下载.docx》由会员分享,可在线阅读,更多相关《高级本光盘模拟试题集Word文件下载.docx(47页珍藏版)》请在冰豆网上搜索。
玛丽卡23
PASTE24
SEARCH24
第三套25
文件排版25
纵横填字游戏26
普通递归关系27
完美的对称28
普及组
第一套
打保龄球
源程序名 bowling.?
?
(pas,c,cpp)
可执行文件名bowling.exe
输入文件名 bowling.in
输出文件名bowling.out
打保龄球是用一个滚球去打击十个站立的柱,将柱击倒。
一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。
一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。
即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。
具体的滚球击柱规则和计分方法如下:
(1)若某一轮的第一次滚球就击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加两次滚球,不妨称其为第十一轮和第十二轮,并不是所有的情况都需要滚第十一轮和第十二轮球)。
该轮得分为本次击倒柱数10与以后两次滚球所击倒柱数之和。
(2)若某一轮的第一次滚球未击倒十个柱,则可对剩下未倒的柱再滚球一次。
如果这两次滚球击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加一次滚球),该轮得分为这两次共击倒柱数10与以后一次滚球所击倒柱数之和。
(3)若某一轮两次滚球未击倒全部十个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。
总之,若—轮中一次滚球或两次滚球击倒十个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。
若一轮内二次滚球击倒柱数不足十个,则本轮得分即为这两次击倒柱数之和。
下面以实例说明如下(字符“/”表示击倒当前球道上的全部的柱):
轮123456789101112
击球情况///729/818//9//8/
各轮得分302719918920202020
累计总分30577685103112132152172192
现在请你编写一个保龄球实时计分程序,用来计算和显示某轮结束后的得分情况。
若某轮的得分暂时无法算出,则该轮得分不显示。
输入:
输入数据用文件bowling.in,文件内容仅有一行,为前若干轮滚球的情况,每轮滚球用一到两个字符表示,每一个字符表示一次击球,字符“/”表示击倒当前球道上的全部的柱,否则用一个数字字符表示本次滚球击倒的当前球道上的柱的数目,两轮滚球之间用一个空格字符隔开。
如上例对应的输入文件内容为:
///729/818//9//8/
输出:
输出到文件bowling.out,共两行,第一行为每轮得分,第二行为到当前轮为止的总得分。
每个得分之间用一个空格隔开。
样例输入:
///729/818//9//8/
样例输出:
302719918920202020
30577685103112132152172192
安全逃离
源程序名EVAC.?
(PAS,C,CPP)
可执行文件名EVAC.EXE
输入文件名EVAC.IN
输出文件名EVAC.OUT
农夫john最近在研究如果发生重大事故,如何让农场里的奶牛逃离问题。
他想要确信在紧急情况下,所有的奶牛都有一个安全逃离方案。
因为在紧急情况下,奶牛们都会失去观察和判断能力,所以最近john一直在教奶牛们逃离的方法,他的方法很简单,就是任何时候都只向北方或东方逃离,北方是行坐标减1的方向,东方是列坐标加1的方向。
奶牛们虽笨,不过这一点事关自己的生命,所以他们牢记在心,而且也一定会这么做。
当然也会出问题,奶牛们在逃离的方向上会横冲直撞,为了阻止奶牛之间互相冲撞造成伤害,john要求任何一个奶牛的逃离路线不能经过其它奶牛的初始位置。
一个逃离方案是安全的如果它能够满足上面的要求,反之它就是不安全的。
奶牛们所在的土地(农场)被划分成了r行和c列的一个矩形地图。
奶牛们都待在这个矩形中的某一个位置。
请帮助john确定给定的一个地图上是否存在一个安全的逃离方案。
比如,下面的两个图:
左边的例子表示了一个能够安全逃离的地图,因为没有任何一个奶牛的逃离路线上包括其他奶牛。
右边的例子表示了一个不安全的地图,因为位于(4,1)的奶牛不论是向东逃离还是向北逃离,它的路线上都会有别的奶牛,从这个图中拿掉任意一头奶牛,这个地图都会变成安全的。
安全不安全
||||C--C.....
||||C--^.....
|C||C--|.....
CC-+-+----C------>
C.
..CCC--......
C表示奶牛,直线表示逃离路线
输入
第1行:
两个整数r,c,用1个空格隔开,表示矩形的行数和列数(均不超过50)。
第2行:
一个整数n,表示奶牛的个数(不超过100)。
第3到n+2行:
共n行,每行有两个整数,之间用1个空格隔开,分别表示这头奶牛所在的行和列。
输出
如果这块土地是安全的,输出0。
如果移走任意一头奶牛这块土地还是不安全,输出-1。
否则输出1,并且在下一行输出移走的那头奶牛的编号,如果有多个奶牛满足要求,输出输入序列中编号最小一个。
样例
EVAC.IN
55
5
11
24
31
22
21
EVAC.OUT
1
表达式的转换(难度系数★★★)
源程序名 express.?
(PAS,C,CPP)
可执行文件名express.exe
输入文件名 express.in
输出文件名express.out
[问题描述]:
平常我们书写的表达式称为中缀表达式,因为它将运算符放在两个操作数中间,许多情况下为了确定运算顺序,括号是不可少的,而中缀表达式就不必用括号了。
后缀标记法:
书写表达式时采用运算紧跟在两个操作数之后,从而实现了无括号处理和优先级处理,使计算机的处理规则简化为:
从左到右顺序完成计算,并用结果取而代之。
例如:
8–(3+2*6)/5+4可以写为:
8326*+5/–4+
其计算步骤为:
8326*+5/–4+
8312+5/–4+
8155/–4+
83–4+
54+
9
编写一个程序,完成这个转换,要求输出的每一个数据间都留一个空格。
[输入]:
就一行,是一个后缀表达式。
输入的符号中只有这些基本符号“0123456789+-*/^()”,并且不会出现形如2*-3的格式。
表达式中的基本数字也都是一位的,不会出现形如12形式的数字。
所输入的字符串不要判错。
[输出]:
若干个中缀表达式,第I+1行比第I行少一个运算符和一个操作数,最后一行只有一个数字,表示运算结果。
运算的结果可能为负数,“/”以整除运算。
并且中间每一步都不会超过2^31。
[样例]:
express.in
8–(3+2*6)/5+4
express.out
8312+5/–4+
8155/–4+
83–4+
54+
9
到天宫做客
源程序名 HEAVEN.?
可执行文件名HEAVEN.exe
输入文件名 HEAVEN.in
输出文件名HEAVEN.out
有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。
我犹豫了。
天上一日,人间一年啊!
当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。
记住,今年是4000年。
天上一天也是24小时,每小时60分,每分60秒。
输入文件的第一行是一个非负整数N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入文件保证无错误,日期无重复。
输出文件仅有一行包含一个非负整数,即在天上的时间(四舍五入精确到秒)。
heaven.in
2
38
122
heaven.out
63266
第二套
奶牛卧室
源程序名BED.?
可执行文件名BED.EXE
输入文件名BED.IN
输出文件名BED.OUT
奶牛们有一个习惯,那就是根据自己的编号选择床号。
如果一头奶牛编号是a,并且有0..k-1一共k张床,那么她就会选择amodk号床作为她睡觉的地点。
显然,2头牛不能睡在一张床上。
那么给出一些奶牛的编号,请你为她们准备一间卧室,使得里面的床的个数最少。
第一行是奶牛的个数n(1<
=n<
=5000);
第2到第n+1行是每头奶牛的编号Si(1<
=Si<
=1000000)。
仅一行,是最少的床的数目。
BED.IN
4
6
10
13
BED.OUT
8
进制转换
源程序名 change.?
可执行文件名change.exe
输入文件名 change.in
输出文件名change.out
请你编一程序实现两种不同进制之间的数据转换。
输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>
10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
输出仅一行,包含一个正整数,表示转换之后的m进制数。
样例:
change.in
16
FF
change.out
11111111
硬币翻转
源程序名 coin.?
可执行文件名coin.exe
输入文件名 coin.in
输出文件名coin.out
在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。
现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。
求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。
输入只有一行,包含一个自然数N(N为不大于100的偶数)。
输出文件的第一行包含一个整数S,表示最少需要的操作次数。
接下来的S行每行分别表示每次操作后桌上硬币的状态(一行包含N个整数(0或1),表示每个硬币的状态:
0——正面向上,和1——反面向上,不允许出现多余空格)。
对于有多种操作方案的情况,则只需输出一种。
coin.in
coin.out
0111
1100
0001
1111
拱猪计分
源程序名 HEART.?
可执行文件名HEART.exe
输入文件名 HEART.in
输出文件名HEART.out
拱猪是一种很有趣的扑克牌游戏。
即使你不知道它的玩法,你也可以由它的计分方式来了解它的趣味性。
假设在此我们仅考虑四个人的拱猪牌局,本题要求你根据下面的计分规则,在牌局结束时计算四位玩家所得分数。
1.我们分别以S、H、D及C来代表黑桃,红心,方块及梅花,并以数字1至13来代表A、2、…、Q、K等牌点,例如︰H1为红心A,S13为黑桃K。
2.牌局结束时,由各玩家持有的有关计分的牌(计分牌)仅有S12(猪),所有红心牌,D11(羊)及C10(加倍)等16张牌。
其它牌均弃置不计。
若未持有这16张牌之任一张则以得零分计算。
3.若持有C10的玩家只有该张牌而没有任何其它牌则得+50分,若除了C10还有其它计分牌,则将其它计分牌所得分数加倍计算。
4.若红心牌不在同一家,则H1至H13等13张牌均以负分计,其数值为-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40。
而且S12与D11分别以-100及+100分计算。
5.若红心牌H1至H13均在同一家,有下列情形︰
o所有红心牌以+200分计算。
o若S12、D11皆在吃下所有红心牌之一家,则此玩家得+500分。
o而C10还是以前面所述原则计算之。
例一:
若各玩家持有计分牌如下:
(每列代表一玩家所持有之牌)
S12H3H5H13
D11H8H9
C10H1H2H4H6H7
H10H11H12
则各家之得分依序为:
-148、+83、-138及-60。
例二:
(第四家未持有任何计分牌)
H1H2H3H4H5H6H7H8H9H10H11H12H13
S12C10
D11
+200、-200、+100及0。
例三:
若有一玩家持有所有16张计分牌,则得+1000分。
其余三家均得零分。
输入:
每个输入文件由多组测试数据构成,每组测试数据有四行,每一行第一个数为该玩家所持有计分牌总数,而后列出其所持有之所有计分牌,牌数与各计分牌均以一个以上的空格分开。
相邻两组测试数据之间不会有空白行,读到四家持牌数都为0表示文件结束。
输出:
每一行输出一组测试数据对应的结果,依次输出各家所得分数,共四个整数(含正负号,0除外),相邻两个整数之间以一个空格分开,符号和数字间不可以有空格。
每组输出间不需要有空白行。
HEART.IN
4S12H3H5H13
3D11H8H9
6C10H1H2H4H6H7
3H10H11H12
13H1H2H3H4H5H6H7H8H9H10H11H12H13
2S12C10
1D11
HEART.OUT
-148+83-138-60
+200-200+1000
第三套
车厢重组(难度系数☆)
源程序名 carry.?
可执行文件名carry.exe
输入文件名 carry.in
输出文件名carry.out
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。
一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。
于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。
他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
输入文件有两行数据,第一行是车厢总数N(不大于10000),第二行是N个不同的数表示初始的车厢顺序。
一个数据,是最少的旋转次数。
carry.in
4321
carry.out
阶乘问题
源程序名 fact.?
可执行文件名fact.exe
输入文件名 fact.in
输出文件名fact.out
也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:
12!
=1x2x3x4x5x6x7x8x9x10x11x12=479,001,600
12的阶乘最右边的非零位为6。
写一个程序,计算N(1<
=N<
=50,000,000)阶乘的最右边的非零位的值。
注意:
10,000,000!
有2499999个零。
仅一行包含一个正整数N。
单独一行包含一个整数表示最右边的非零位的值。
fact.in
12
fact.out
子数整数
源程序名 num.?
可执行文件名num.exe
输入文件名 num.in
输出文件名num.out
对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:
sub1=a1a2a3
sub2=a2a3a4
sub3=a3a4a5
例如,五位数20207可以拆分成
sub1=202
sub2=020(=20)
sub3=207
现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1,sub2,sub3都可被K整除。
输入由键盘输入,输入仅一行,为正整数K(0<
K<
1000)。
输出到文件,输出文件的每一行为一个满足条件的五位数,要求从小到大输出。
不得重复输出或遗漏。
如果无解,则输出“No”。
num.in
15
num.out
22555
25555
28555
30000
垃圾陷阱
源程序名WELL.?
可执行文件名WELL.EXE
输入文件名WELL.IN
输出文件名WELL.OUT
卡门——农夫约翰极其珍视的一条Holsteins奶牛——已经落了到“垃圾井”中。
“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<
=D<
=100)英尺。
卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了。
另外,卡门可以通过吃一些垃圾来维持自己的生命。
每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间。
假设卡门预先知道了每个垃圾扔下的时间t(0<
t<
=1000),以及每个垃圾堆放的高度h(1<
=h<
=25)和吃进该垃圾能维持生命的时间f(1<
=f<
=30),要求出卡门最早能逃出井外的时间,假设卡门当前体内有足够持续10小时的能量,如果卡门10小时内没有进食,卡门就将饿死。
第一行为2个整数,D和G(1<
=G<
=100),G为被投入井的垃圾的数量。
第二到第G+1行每行包括3个整数:
T(0<
T<
=1000),表示垃圾被投进井中的时间;
F(1<
=F<
=30),表示该垃圾能维持卡门生命的时间;
和H(1<
=H<
=25),该垃圾能垫高的高度。
如果卡门可以爬出陷阱,输出一个整表示最早什么时候可以爬出;
否则输出卡门最长可以存活多长时间。
WELL.IN
204
549
932
12610
1311
WELL.OUT
[样例说明]
卡门堆放她收到的第一个垃圾:
height=9;
卡门吃掉她收到的第二个垃圾,使她的生命从10小时延伸到13小时;
卡门堆放第3个垃圾,height=19;
卡门堆放第4个垃圾,height=20。
提高组
低价购买
源程序名 BUYLOW.?
可执行文件名BUYLOW.EXE
输入文件名 BUYLOW.IN
输出文件名BUYLOW.OUT
“低价购买”这条建议是在奶牛股票市场取得成功的一半规则。
要想被认为是伟大的投资者,你必须遵循以下的问题建议:
“低价购买;
再低价购买”。
每次你购买一支股票,你必须用低于你上次购买它的价格购买它。
买的次数越多越好!
你的目标是在遵循以上建议的前提下,求你最多能购买股票的次数。
你将被给出一段时间内一支股票每天的出售价(216范围内的正整数),你可以选择在哪些天购买这支股票。
每次购买都必须遵循“低价购买;
再低价购买”的原则。
写一个程序计算最大购买次数。
这里是某支股票的价格清单:
日期123456789101112
价格686954646864706778629887
最优秀的投资者可以购买最多4次股票,可行方案中的一种是:
日期25610
价格69686462
第1行:
N(1<
=N<
=5000),股票发行天数
第2行:
N个数,是每天的股票价格。
输出文件仅一行包含两个数:
最大购买次数和拥有最大购买次数的方案数(<
=231)当二种方案“看起来一样”时(就是说它们构成的价格队列一样的时候),这2种方案被认为是相同的。
BUYLOW.IN
686954646864706778629887
BUYLOW.OUT
42
棋盘游戏(game)
源程序名game.?
可执行文件名game.exe
输入文件名game.in
输出文件名game.out
时限2s
在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的。
移动棋子的规则是交换相邻两个棋子。
现在给出一个初始棋盘和一个最终棋盘,要求你找出一个最短的移动序列使初始棋盘变为最终棋盘。
Klux说:
“这么简单的题目,我都会做!
”
第1到4行每行四个数字(1或者0),描述了初始棋盘
接着是一个空行
第6到9行每行四个数字,描述了最终棋盘
输出文件的第一行是一个整数n,表示最少的移动步数。
接下来n行每行4个数,r1,c1,r2,c2,表示移动的两个棋子的坐标(r1,c1),(r2,c2)(棋盘左上角的坐标为(1,1),并且他右边的格子为(1,2))
如果有许多组解,你可以输出任意一组。
game.in:
0000
1110
0010
1010
0101
game.out
1222
1424
3242
4344
说明:
翻译自ceoi99-game,数据及解答由ceoi提供。
求正整数
源程序名 INT.?
可执行文件名INT.EXE
输入文件名 INT.IN
输出文件名INT.OUT
对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m。
n=4,则m=6,因为6有4个不同整数因子1,2,3,6;
而且是最小的有4个因子的整数。
n(1≤n≤50000)
m
INT.IN