1、一、综合处理题1、两倍 - http:/ 2 到 15 个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定 1 4 3 2 9 7 18 22,得到的答案是 3,因为 2 是 1的两倍,4 是 2 个两倍,18是 9 的两倍。 Input输入包括多组测试数据。每组数据包括一行,给出 2 到 15 个两两不同且小于 100 的正整数。每一行最后一个数是 0,表示这一行的结束后,这个数不属于那 2 到 15 个给定的正整数。输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。Output对每组输入数据,输出一行,给出有多少个数对满
2、足其中一个数是另一个数的两倍。Sample Input1 4 3 2 9 7 18 22 02 4 8 10 07 5 11 13 1 3 0-1Sample Output3202、谁拿了最多奖学金 - http:/ 1) 院士奖学金,每人 8000 元,期末平均成绩高于 80分(80),并且在本学期内发表1篇或 1 篇以上论文的学生均可获得; 2) 五四奖学金,每人 4000 元,期末平均成绩高于 85分(85),并且班级评议成绩高于80 分( 80)的学生均可获得; 3) 成绩优秀奖,每人 2000 元,期末平均成绩高于 90分(90)的学生均可获得; 4) 西部奖学金,每人 1000 元
3、,期末平均成绩高于 85分(85)的西部省份学生均可获得; 5) 班级贡献奖,每人 850元,班级评议成绩高于 80分(80)的学生干部均可获得; 只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是 87 分,班级评议成绩 82 分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850 元。 现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。 Input输入的第一行是一个整数 N(1 应用到 “VICTORIOUS“ 上,则得到“IVOTCIRSUO
4、“。 人们很快意识到单独应用替换方法或排列方法,加密是很不保险的。但是如果结合这两种方法,在当时就可以得到非常可靠的加密方法。所以,很多重要信息先使用替换方法加密,再将加密的结果用排列的方法加密。用两中方法结合就可以将“VICTORIOUS“ 加密成“JWPUDJSTVP“。 考古学家最近在一个石台上发现了一些信息。初看起来它们毫无意义,所以有人设想它们可能是用替换和排列的方法被加密了。人们试着解读了石台上的密码,现在他们想检查解读的是否正确。他们需要一个计算机程序来验证她,你的任务就是写这个验证程序。 Input输入有两行。第一行是石台上的文字。文字中没有空格,并且只有大写英文字母。第二行是
5、被解读出来的加密前的文字。第二行也是由大写英文字母构成的。 两行字符数目的长度都不超过计划100。Output如果第二行经过某种加密方法后可以产生第一行的信息,输出 “YES“,否则输出“NO“ 。Sample InputJWPUDJSTVPVICTORIOUSSample OutputYES2、词典 - http:/ 100000 个词条,每个词条占据一行。每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000 行,而且每行只包括一个外语单词。输入中出现单词
6、只包括小写字母,而且长度不会超过 10。Output在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个外语单词不在词典中,就把这个单词翻译成“eh”。 Sample Inputdog ogdaycat atcaypig igpayfroot ootfrayloops oopslayatcayittenkayoopslaySample Outputcatehloops3、最短前缀 - http:/ “carbon“的字串是: “c“, “ca“, “car“, “carb“, “carbo“, 和 “carbon“。注意到这里我们不认为空串是字串, 但是每个非空串是它自身的字串
7、. 我们现在希望能用前缀来缩略的表示单词。例如, “carbohydrate“ 通常用“carb“来缩略表示. 现在给你一组单词, 要求你找到唯一标识每个单词的最短前缀 在下面的例子中,“carbo hydrate“ 能被缩略成“carboh“, 但是不能被缩略成“carbo“ (或其余更短的前缀 ) 因为已经有 一个单词用“carbo“开始 一个精确匹配会覆盖一个前缀匹配,例如,前缀“car“精确匹配单词“car“. 因此 “car“ 是 “car“的缩略语是 没有二义性的 , “car”不会被当成“carriage“或者任何在列表中以“car“开始的单词. Input输入包括至少 2 行,
8、至多 1000 行. 每行包括一个以小写字 母组成的单词,单词长度至少是 1,至多是 20.Output输出的行数与输入的行数相同。每行输出由相应行输入的单词开始,后面跟着一个空格接下来是相应单词的没有二义性的最短前缀标识符。Sample InputcarbohydratecartcarburetorcaramelcariboucarboniccartilagecarboncarriagecartoncarcarbonateSample Outputcarbohydrate carbohcart cartcarburetor carbucaramel caracaribou caricarbo
9、nic carbonicartilage carticarbon carboncarriage carrcarton cartocar carcarbonate carbona三、模拟1、数根 http:/ 比如,对于 24 来说,把 2 和 4 相加得到 6,由于 6 是一位数,因此 6 是 24 的数根。再比如 39,把 3 和 9 加起来得到 12,由于 12 不是一位数,因此还得把 1 和 2 加起来,最后得到 3,这是一个一位数,因此 3 是 39 的数根。Input输入包括一些正整数(小于 101000),每个一行。输入的最后一行是 0,表示输入的结束,这一行不用处理。Output
10、对每个正整数,输出它的数根。每个结果占据一行。Sample Input24390Sample Output632、循环数 http:/ 位的一个整 数是循环数(cyclic)的条件是:当用一个 1 到 n 之间的整数去乘它时, 会得到一个将原来的数首尾相接循环移动若干数字再在某处断开而得到的数字。也就是说,如果把原来的数字和新的数字都首尾相接,他们得到的环是相同的。只是两个数的起始数字不一定相同。例如,数字 142857 是循环数,因为: 142857 *1 = 142857 142857 *2 = 285714 142857 *3 = 428571 142857 *4 = 571428 14
11、2857 *5 = 714285 142857 *6 = 857142 Input写一个程序确定给定的数是否是循环数。输入包括多个长度为 2 位到 60 位的整数。(注意,先导的 0 也是合理的输入不应该被忽略, 例如 “01“是 2 位数,“1“ 是 1 位数。) Output对于每一个输入的整数,输出一行表明它是否是循环数。 Sample Input142857142856142858010588235294117647Sample Output142857 is cyclic142856 is not cyclic142858 is not cyclic01 is not cyclic0
12、588235294117647 is cyclic四、高精度计算1、孙子问题 http:/ 为解决这个问题民间流传了如下歌诀:“三人同行七十稀,五树梅花廿一枝,七子团员正半月,除百零五便得知。” 把上面的问题说得明白一点就是:有一个正整数 N,除以 3 的余数是 2,除以 5 的余数是3,除以 7 的余数是 2,要求这个数。 民间给出的解法是:把 N 除以 3的余数乘以70,把 N 除以 5的余数乘以21,把 N 除以 7的余数乘以15,把这三个结果加起来,最后把得到的结果除以105 得到的就是答案。 其实在民间的解法中不除以 105得到的也是一个符合题意的答案,而且民间的解法对于已知“除以
13、3 的余数,除以 5 的余数和除以 7的余数” 的问题都能得到一个符合要求的答案。比如对于上面的问题,得到的结果是 2 * 70 + 3 * 21 + 2 * 15 = 233,这个结果也能满足除以3 的余数是2 ,除以 5 的余数是 3,除以 7 的余数是 2。如果已知的问题是“除以3 的余数是 1,除以 5 的余数是 4,除以 7 的余数是 4”,民间解法得到的结果 1 * 70 + 4 * 21 + 4 * 15 = 214,这个结果也满足除以 3的余数是 1,除以 5 的余数是 4,除以7 的余数是 4。 把这个问题推广到更普遍的情况:对于给定的正整数 a1, a2, . an,是否存
14、在正整数 b1, b2, . bn,使得对于任意的一个正整数 N,如果用 N 除以 a1 的余数是 p1,用 N 除以 a2的余数是 p2用 N 除以 an 的余数是 pn,那么 M = p1 * b1 + p2 * b2 + . + pn * bn 能满足M 除以 a1的余数也是p 1, M 除以 a2的余数也是p 2M 除以 an的余数也是p n。 Input输入包括多组测试数据,每组数据包括一行。在每组数据中,首先给出 ai 的个数 n (1 = n = 10),然后给出 n个不大于 50 的正整数a 1, a2, . an。最后一组测试数据中 n = 0,表示输入的结束,这组数据不用处
15、理。Output对于每一组测试数据,输出一行,如果存在正整数 b1, b2, . bn 满足题意,则输出这 n个正整数(数的长度不要超过 50位)如果有多组答案,输出任意一组即可,相邻的正整数之间用一个空格隔开;否则,输出“NO”。Sample Input3 3 5 70Sample Output70 21 15五、枚举1、数字方格 http:/ 3 个方格,每个方格里面都有一个整数 a1,a2,a3 。已知 0 = a1, a2, a3 = n,而且 a1 + a2 是 2 的倍数,a2 + a3 是 3 的倍数, a1 + a2 + a3 是 5 的倍数。你的任务是找到一组 a1,a2,a
16、3 ,使得 a1 + a2 + a3 最大。 Input输入的第一行是一个数t,表示测试数据的数目。接下来的 t行,每行给出一个 n (0 = n = 100)的值。Output对于每一个n 的值,输出 a1 + a2 + a3 的最大值。Sample Input203Sample Output052、画家问题 http:/ N*N 个正方形的砖组成,其中一些砖是白色的,另外一些砖是黄色的。Bob 是个画家,想把全部的砖都涂成黄色。但他的画笔不好使。当他用画笔涂画第(i, j)个位置的砖时, 位置(i-1, j)、 (i+1, j)、 (i, j-1)、 (i, j+1)上的砖都会改变颜色。请
17、你帮助 Bob 计算出最少需要涂画多少块砖,才能使所有砖的颜色都变成黄色。 Input第一行是个整数 t(1t 20),表示要测试的案例数。然后是 t 个案例。每个案例的首行是一个整数 n (1n 15),表示墙的大小。接下来的 n行表示墙的初始状态。每一行包含n 个字符。第 i 行的第j 个字符表 示位于位置(i,j) 上的砖的颜 色。“w”表示白砖,“y”表示黄砖。Output每个案例输出一行。如果 Bob能够将所有的砖都涂成黄色,则输出最少需要涂画的砖数,否则输出“inf”。Sample Input2 3 yyy yyy yyy 5wwwww wwwww wwwww wwwww wwww
18、w Sample Output0 15 3、拨钟问题 http:/ 9 个时钟,排成一个 3*3 的矩阵。 现在需要用最少的移动,将 9 个时钟的指针都拨到 12 点的位置。共允许有 9种不同的移动。如右表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动 90 度。 移动 影响的时钟 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI (图 2) Input从标准输入设备读入 9个整数,表示各时钟指针的起始位置。1=12 点、1=3 点、2=6 点、3=9 点。Output输出一个最短的移动序列,使得 9 个时钟的指针都指向
19、 12 点。按照移动的序号大小,输出结果。Sample Input3 3 0 2 2 2 2 1 2 Sample Output4 5 8 9 六、递归与动态规划1、算 24 http:/ 4 个小于 10 个正整数,你可以使用加减乘除 4种运算以及括号把这 4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于 24。 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。 比如,对于 5,5 ,5,1 ,我们知道 5 * (5 1 / 5) = 24,因此可以得到 24。又比如,对于 1,1,4,2 ,我们怎么都不能得
20、到 24。 Input输入数据包括多行,每行给出一组测试数据,包括 4 个小于 10 个正整数。最后一组测试数据中包括 4 个 0,表示输入的结束,这组数据不用处理。Output对于每一组测试数据,输出一行,如果可以得到 24,输出“YES” ;否则,输出“NO”。Sample Input5 5 5 11 1 4 20 0 0 0Sample OutputYESNO2、滑雪 http:/ 喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出
21、。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为 24-17-16-1。当然 25-24-23-.-3-2-1 更长。事实上,这是最长的一条。 Input输入的第一行表示区域的行数 R 和列数 C(1 = R,C = 100)。下面是 R 行,每行有 C 个整数,代表高度 h,0=h=10000。Output输出最长区域的长度。Sample Input5 51 2 3 4 516
22、 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9Sample Output253、最大子矩阵 http:/ * 1)子矩阵。 比如,如下 4 * 4 的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 的最大子矩阵是 9 2 -4 1 -1 8 这个子矩阵的大小是 15。Input输入是一个N * N 的矩阵。输入的第一行给出 N (0 N = 100)。再后面的若干行中,依次(首先从左到右给出第一行的 N 个整数,再从左到右给出第二行的 N 个整数)给出矩阵中的 N2 个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在-127, 127。Output输出最大子矩阵的大小。Sample Input40 -2 -7 0 9 2 -6 2-4 1 -4 1 -18 0 -2Sample Output15