C语言程序设计大赛题目828.pdf
《C语言程序设计大赛题目828.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计大赛题目828.pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、程序设计大赛训练题(1)2GCD()InputandOutput2a,b(0a,b10000000)0 02GCDSampleInput12 3625 240 0SampleOutputGCD(12,36)=12GCD(25,24)=1)(2)联集读入 2 个正整数 a,b,请输出介于 a,b之间(包含 a,b)2,3,5倍数的联集大小。Input(输入可能包含了好几列测试资料,每一列有2 个整数 a,b。a=0b=0代表输入结束。)Output(对每一列输入,请输出联集的大小。请参考SampleOutput)SampleInput(110;10 20;0 0;)SampleOutput(8;
2、7)(3)Q100:The3n+1problem考虑以下的演算法:1.输入 n2.印出 n3.如果 n=1结束4.如果 n是奇数 那么 n=3*n+15.否则 n=n/26.GOTO2例如输入 22,得到的数列:22 11 34 17 522613 40 2010 516 842 1据推测此演算法对任何整数而言会终止(当列印出 1的时候)。虽然此演算法很简单,但以上的推测是否真实却无法知道。然而对所有的 n(0 n 1,000,000)来说,以上的推测已经被验证是正确的。给一个输入 n,透过以上的演算法我们可以得到一个数列(1作为结尾)。此数列的长度称为 n 的 cycle-length。上面
3、提到的例子,22 的 cyclelength为16.问题来了:对任意 2 个整数 i,j 我们想要知道介于 i,j(包含 i,j)之间的数所产生的数列中最大的 cycle length 是多少。Input:输入可能包含了好几列测试资料,每一列有一对整数资料 i,j。(0i,j 10000)Output:对每一对输入 i,j 你应该要输出 i,j 和介于 i,j 之间的数所产生的数列中最大的 cycle length。Sample Input:1 10;10 1;100 200;201 210;900 1000;Sample Output1 10 2010 1 20100 200 125201
4、210 89900 1000 174(4)Q101:The Blocks Problem在早期人工智慧的领域中常常会用到机器人,在这个问题中有一支机器手臂接受指令来搬动积木,而你的任务就是输出最后积木的情形。一开始在一平坦的桌面上有 n 块积木(编号从 0 到 n-1)0 号积木放在 0 号位置上,1 号积木放在 1 号位置上,依此类推,如下图。机器手臂有以下几种合法搬积木的方式(a和 b 是积木的编号):move a onto b在将 a 搬到 b 上之前,先将 a 和 b 上的积木放回原来的位置(例如:1就放回 1 的最开始位罝)move a over b在将 a 搬到 b 所在的那堆积木
5、之上之前,先将 a 上的积木放回原来的位罝(b 所在的那堆积木不动)pile a onto b将 a 本身和其上的积木一起放到b 上,在搬之前 b 上方的积木放回原位pile a over b将 a 本身和其上的积木一起搬到到b 所在的那堆积木之上quit动作结束前四个动作中若 a=b,或者 a,b 在同一堆积木中,那么这样的动作算是不合法的。所有不合法的动作应该被忽略,也就是对各积木均无改变。Input 输入含有多组测试资料,每组测试资料的第一列有一个正整数n(0 n 25),代表积木的数目(编号从 0 到 n-1)。接下来为机器手臂的动作,每个动作一列。如果此动作为 quit,代表此组测试
6、资料输入结束。你可以假设所有的动作都符合上述的样式。请参考 Sample Input。Output 每组测试资料输出桌面上各位置积木的情形(每个位置一列,也就是共有 n 列),格式请参考 Sample Output。Sample Input10move 9 onto 1move 8 over 1move 7 over 1move 6 over 1pile 8 over 6pile 8 over 5move 2 over 1move 4 over 9quit4pile 0 over 1pile 2 over 3move 1 onto 3quitSample Output0:01:1 9 2 42
7、:3:34:5:5 8 7 66:7:8:9:0:01:2:23:3 1(5)Q102:Ecological Bin Packing有 3 个桶子用来装回收的玻璃瓶,玻璃瓶的颜色有三种:棕色(Brown)、绿色(Green)、透明色(Clear)。在这个问题里我们会告诉你每个桶子里的玻璃瓶的颜色及数量,现在要搬移桶子里的玻璃瓶使得最后每个桶子里都只有单一颜色的玻璃瓶,以方便回收。你的任务就是要算出最小搬移的瓶子数。你可以假设每个桶子的容量无限大,并且总共搬移的瓶子数不会超过 231。Input 每笔测试资料一行,每行有9 个整数.前 3 个代表第 1 个桶子里 Brown,Green,Clea
8、r 颜色的瓶子数。接下来的 3 个数代表 第 2 个桶子里 Brown,Green,Clear 颜色的瓶子数。最后的 3 个数代表第 3 个桶子里 Brown,Green,Clear 颜色的瓶子数。例如:10 15 20 30 12 8 15 8 31表示有 20 个 Clear 色的玻璃瓶在第 1 个桶子里,12 个 Green 色的玻璃瓶在第 2个桶子里,15 个 Brown 色的玻璃瓶在第 3 个桶子里。Output 对每一笔测试资料,输出 3 个桶子内最后存放之玻璃瓶颜色,以及最小搬移的瓶子数。请以大写的G、B、C 分别代表绿色(Green)、棕色(Brown)、透明色(Clear)。
9、例如:BCG 30代表最后搬移的结果第 1 个桶子内的玻璃瓶颜色为 Brown,第 2 个桶子内的玻璃瓶颜色为 Clear,第 3 个桶子内的玻璃瓶颜色为 Green.并且总共搬移了 30 个玻璃瓶。如果最小搬移瓶子数有一组以上的组合,请输出字典顺序最小的那一组答案。Sample input1 2 3 4 5 6 7 8 95 10 5 20 10 5 10 20 10Sample OutputBCG 30CBG 50(6)Q103:Stacking Boxes在数学或电脑科学里,有些概念在一维或二维时还蛮简单的,但到 N 维就会显得非常复杂。试想一个n维的“盒子”:在二维空间里,盒子(2,3
10、)可代表一个长为 2 个单位,宽为 3 个单位的盒子;在三维空间里,盒子(4,8,9)则是一个 4*8*9(长、宽、高)的盒子。至于在六维空间里,也许我们不清楚(4,5,6,7,8,9)长得怎样,不过我们还是可以分析这些盒子的特性。在此问题里,我们要算出一组 n 维盒子里,它们的“最长套入串列”:b1,b2,.,bk,其中每个盒子bi都可以“放入”盒子bi+1中(1=i k)考虑两个盒子 D=(d1,d2,.,dn),E=(e1,e2,.,en)。如果盒子 D 的 n 个维,能够存在一种重排,使得重排后,D 每一维的量度都比 E中相对应的维的量度还要小,则我们说盒子 D 能“放入”盒子 E。(
11、用比较不严谨的讲法,这就好像我们将盒子 D 翻来翻去,看看能不能摆到 E 里面去。不过因为我们考虑的是任一重排,所以实际上盒子不只可转来转去,甚至还可以扭曲。)(还是看看下面的例子说明好了)。譬如说,盒子 D=(2,6)能够被放入盒子 E=(7,3)里,因为 D 可以重排变为(6,2),这样子 D 的每个维的量度都比 E 里对应的维还要小。而盒子 D=(9,5,7,3)就没办法放进盒子 E=(2,10,6,8),因为就算再怎摸重排 D 里的维,还是没办法符合“放入”的条件。不过 F=(9,5,7,1)就可以放入 E 了,因为 F 可以重排成(1,9,5,7),这样就符合了放入的条件。我们今定义
12、“放入”如下:对于任两个盒子 D=(d1,d2,.,dn)和 E=(e1,e2,.,en),如果存在一种 1.n 的重排,使得对于任何的 1=i=n,皆有 d(i)ei,则我们说盒子 D 能“放入”盒子 E。Input 输入包含多组测试资料。每组测试资料的第一列有两个数字:第一个是盒子的数量k,然后是盒子的维数n;接下来有k列,每列有 n 个整数表示一个盒子的n个维的量度,量度之间由一个以上的空白做区隔。第一列表示第一个盒子,第二列表示第二个盒子,依此类推;此问题里,盒子的维数最小是 1,最大是 10,并且每组测试资料中盒子的个数最多为 30 个。Output 对于每一组测试资料,你必须输出两
13、列数字:第一列是“最长套入串列”的长度,第二列是按照内外顺序,印出“最长套入串列”里盒子的编号(其中编号是按照在输入档案的每组数列里所出现的顺序,例如第一个盒子就是 1号.等等。)最里面的盒子(或是最小的)摆在第一个,再来是次小的,依此类推;如果对于每一组的盒子,存在两个以上的“最长套入串列”,输出任何一个均可。Sample Input5 23 78 105 29 1121 188 65 2 20 1 30 1023 15 7 9 11 340 50 34 24 14 49 10 11 12 13 1431 4 18 8 27 1744 32 13 19 41 191 2 3 4 5 680
14、37 47 18 21 9Sample Output53 1 2 4 547 2 5 6(7)Q104:Arbitrage所谓的“三角套汇(arbitrage)”就是在几种外币中做金钱的交易,期待从汇差中获取少许的利润。例如:1 元美金可以买 0.7 英镑,1 元英镑可以买 9.5 法朗,1 元法朗可以买 0.16 美金。所以如果我们把 1 元美金换成英镑,再把英镑换成法朗,最后再把法朗换回美金,那么最后得到的美金将是:1*0.7*9.5*0.16=1.064 美元。也就是说我们可以从中获取汇差 0.064 美元,相当于赚了 6.4%。请你写一个程式找出是否有这样套汇的情况,可以获取如上所述的
15、利益。要产生一个成功的套汇,在换外币的过程中,开始的币种一定得等于最后的币种。但是从哪一种开始都可以。Input 输入含有多组测试资料。每组测试资料的第一列,有一个整数 n(2=n 0.01)。如果有不止一种转换可以获取超过 1%的利益,请输出转换次数最少的。如果转换次数最少的不止一种,那么任何一种都可以。请注意:在这里只要求转换次数最少,并没有要求获利要最大,只要能大于 1%就可以了。另外,国税局还规定最多只能转换 n 次(n 是币种的数目)。像 1,2,1 这样的转换次数为 2。如果在 n 次的转换内都无法获利超过 1%,请输出 noarbitrage sequence exists。Sa
16、mple InputSample Output31.2.89.88 5.11.1 0.1543.10.00230.350.210.003538.13200180.55910.3392.110.0890.0611122.00.451 2 11 2 4 1no arbitrage sequence exists(8)Q105:The Skyline Problem由于高速绘图电脑工作站的出现,CAD(computer-aided design)和其他领域(CAM,VLSI设计)都充分使用这些电脑的长处。而在本问题中,你必须帮助建筑师,根据他所提供给你都市中建筑物的位置,你得帮他找出这些建筑物的空中
17、轮廓(skyline)。为了使问题容易处理一些,所有的建筑物都是矩形的,并且都建筑在同一个平面上。你可以把这城市看成一个二度平面空间。每一栋建筑物都以(LiHiRi)这样的序列来表示。其中Li和 Ri分别是该建筑物左边和右边的位置,Hi则是建筑物的高度。下方左图就是(1,11,5),(2,6,7),(3,13,9),(12,7,16),(14,3,25),(19,18,22),(23,13,29),(24,4,28)这八栋建筑物的位置图。而你的任务就是画出这些建筑物所构成的轮廓,并且以(1,11,3,13,9,0,12,7,16,3,19,18,22,3,23,13,29,0)这样的序列来表示
18、如下方右图的轮廓。Input 只有一组测试资料。每列有一栋建筑物的资料。建筑物不会超过50 栋。所有的数字都小于 10000。并且建筑物已按照Li排好序。Output 输出为描述建筑物轮廓的向量。在轮廓向量(v1,v2,v3,.,vn-1,vn)中,在 i 为奇数的情形下,vi表示一条垂直线(x座标),在 i 为偶数的情形下,vi表示一条水平线(高度)。轮廓向量就像一只虫从最左边建筑物走起,沿著轮廓路径水平及垂直的行走的路径。所以最后轮廓向量的最后一个数一定为 0。Sample Input1 11 52 6 73 13 912 7 1614 3 2519 18 2223 13 2924 4 2
19、8Sample Output1 11 3 13 9 0 12 7 16 3 19 18 22 3 23 13 29 0(9)Q107:The Cat in the Hat一只神奇聪明猫走进了一间乱七八糟的房间,他不想自己动手收拾,他决定要找帮手来工作。于是他从他的帽子中变出了N 只小猫来帮他(变出来的猫,高度为原来猫的 1/(N+1))。这些小猫也有帽子,所以每一只小猫又从他的帽子中变出 N 只小小猫来帮他。如此一直下去,直到这些小小小.猫小到不能再小(高度1),他们的帽子无法再变出更小的猫来帮忙,而这些最小的猫只得动手打扫房间。注意:所有猫的高度都是正整数。在这个问题中,给你一开始那只猫的高
20、度,以及最后动手工作的猫的数目(也就是高度为 1 的猫的数目)。要请你求出有多少只猫是没有在工作的,以及所有猫的高度的总和。Input 每组测试资料一列,有 2 个正整数分别代表一开始那只猫的高度,以及最后动手工作的猫的数目。0 0 代表输入结束。Output 每组测试资料输出一列,包含 2 个正整数分别代表有多少只猫是没有在工作的,以及所有猫的高度的总和。Sample Input216 1255764801 167961664 10 0Sample Output31 671335923 302759116 127(10)Q108:Maximum Sum给你一个 NxN 的阵列,请你找出有最大
21、和的子区域(sub-rectangle)其和为多少。一个区域的和指的是该区域中所有元素值的和。一个区域是指相连的任意大小的子阵列。例如,对以下的二维阵列:其最大和的子区域位于左下角,并且其和为15。如下所示:Input 只有一组测试资料,第一列有一个正整数N(N=100),代表此二维阵列大小为 NxN。从第二列起有 N2个整数,代表此阵列的内容。每个整数都介于-127到 127 之间,且以列为主(row-major)的顺序排列。Sample Input 即为上图所示的阵列。Output 输出有最大和的子区域其和是多少。Sample Input40-2-70 92-62-41-41-180-2S
22、ample Output15(11)Q111:History Grading在资讯科学中有一些是关于在某些条件限制下,找出一些计算的最大值。以历史考试来说好了,学生被要求对一些历史事件根据其发生的年代顺序来排列。所有事件顺序都正确的学生无疑的可以得满分。但是那些没有全对的人又该如何给分呢?以下有 2 种可能的给分方式:每个与标准答案的顺序相同的事件得1 分1。每个在最长(但不一定要连续)的序列事件中,其相对的顺序亦可以在标准答案发现者,每个事件得1 分。举例说明:如果有4 个事件其发生时间的顺序依次是1 2 3 4(就是标准答案啦,意思是第 1 个事件发生顺序为 1,第 2 个事件发生的顺序为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 大赛 题目 828
限制150内