[A] Andy's First Dictionary
Andy是个8岁的孩子,他梦想要制作一本他自己的字典。这并不是一件容易的事,因为他认识的字还不是那么多。他并不想要自己去想这本字典中该放哪些字,他有个聪明的主意。就是拿出他最喜欢的一本故事书,从那里面挑出所有不同的字来,然后按照字典数序列出。当然,对他来说这是一件相当花时间的工作,所以你被要求写一个程式来帮助他。 在这个问题中,一个字被定义为一连续字母所组成的字串。并且,你的程式应该是不管字母大小写的。例如: "Apple", "apple", "APPLE" 应该被视为相同的字。 |
Input
输入为一篇文章,最多不会超过5000 列,每列最多200 个字元。
Output
输出文章中出现的所有不同的字,每个字一列。所有的字都以小写字母输出,并且按照字典数序输出。你可以假设所有不同的字的数目不会超过5000 。
Sample Input | Sample Output |
Adventures in Disneyland Two blondes were going to Disneyland when they came to a fork in the road. The sign read: "Disneyland Left." So they went home. | a adventures blondes came disneyland fork going home in left read road sign so the they to two went were when |
[B] Software CRC
你在一家有很多个人电脑的公司上班。你的老板,连一分都省博士,想要把这些个人电脑连线,但是他又不想要花钱买网路卡。由于你不小心告诉老板每台电脑出厂时就有一个非同步串列埠在上面,老板当然把脑筋动到这不用花钱的解决方案上。于是可怜的你被指派来完成这工作软体的需求,以使这些电脑之间可以连线。
你已经读了许多关于通讯的书并且知道在传送及接收讯息时,确保讯息的正确性是一个重点。典型的作法是在讯息的最后加上额外的错误检查码。这个资讯允许接收程式检查出传送的资讯是否有错误(在大多数的例子)。于是,你跑到图书馆借回了一本关于通讯厚厚的书,利用周末(当然没有加班费)研究错误检查的部分。
最后,你决定CRC(cyclic redundancy check)是最适合的错误检查方式。以下描述这个机制:
CRC Generation 待传递的讯息被视为一列长长二元数。讯息的第一个位元组(byte)被当作这二元数最重要的位元组,第二个位元组被当作第二重要的位元组,依此类推。这个二元数被称为"m"。当传送时会在"m"之后加上2个位元组的CRC检查码,然后整个二元数称为"m2"。 这个CRC的检查码被产生使得"m2"可以整除某个16位元的值"g"。所以当接收端收到一讯息,只要把他除以"g",如果余数为0即代表此讯息正确。 |
你也注意到,大部分建议采用的g值都是奇数,所以你决定用34943 当作g的值。现在你迫切的任务就是对待传送的讯息,写一个程式算出这个CRC的值。
例如:若要传送的讯息为:AB(二进位的表示式为:01000001 01000010),你必须算出的CRC值应为60 1B(01100000 00011011的十六进位表示式),使得01000001 01000010 01100000 00011011可以整除34943(10进位)。
Input
每组测试资料一列,含有一个待传送的讯息(不会超过1024个ASCII字元的长度),列结束字元(End of line)不被视为待传送讯息的一部份。若遇到只含# 的一列,代表输入结束(此列无须输出)。请参考Sample Input。
Output
对每组测试资料输出一列,CRC的值(以十六进位表示)。请注意:CRC的值一定介于0到34942(十进位)之间。输出格式请参考Sample Output。
Sample Input | Sample Output |
this is a test A AB Nothing gonna change my love for you. # | 77 FD |
[C] Happy Number
让我们定义正整数S 0中每个数字的平方和为S 1。以相同的方法我们定义S 1中每个数字的平方和为S 2,并依此类推。假如有某个S i = 1( i >= 1)则我们说S 0是一个Happy number。如果某一个数不是Happy number,那他就是一个Unhappy number。
例如: 7 是一个Happy number,因为7 -> 49 -> 97 ->130 -> 10 -> 1。
但是4 是一个Unhappy number,因为4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4,永远也无法产生1。
Input
输入的第一列有一个整数代表以下有多少组测试资料。
每组测试资料一列含有1个正整数N( N < 10 9)。
Output
对每组测试资料输出一列,输出这是第几组测试资料,以及N为Happy number 或Unhappy number。输出格式请参考Sample Output。
Sample Input | Sample Output |
3 | Case #1: 7 is a Happy number. |
[D] All in All
给你2个字串s,t,请你写一个程式判断是否s是t的子字串。也就是说当你移走t字串中的某些字元后,剩下的字串就是s。
Input
每笔测试资料一列。每列有2个字串,s及t,以空白分隔。
Output
对每一列输入,请输出是否s是t的子字串。
Sample Input
abc abc sequence subsequence person compression VERDI vivaVittorioEmanueleReDiItalia caseDoesMatter CaseDoesMatter
Sample Output
Yes Yes No Yes No
[E] 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所在的那堆积木之上之前,先将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 ,代表此组测试资料输入结束。你可以假设所有的动作都符合上述的样式。请参考Sample Input。
Output
每组测试资料输出桌面上各位置积木的情形(每个位置一列,也就是共有n列),格式请参考Sample Output。
Sample Input
10 move 9 onto 1 move 8 over 1 move 7 over 1 move 6 over 1 pile 8 over 6 pile 8 over 5 move 2 over 1 move 4 over 9 quit 4 pile 0 over 1 pile 2 over 3 move 1 onto 3 quit
Sample Output
0: 0 1: 1 9 2 4 2: 3: 3 4: 5: 5 8 7 6 6: 7: 8: 9: 0: 0 1: 2: 2 3: 3 1
[F] My T-shirt suits me
我们的朋友Victor参加一个环保团体。它的老板要他把N 件T-shirt 分给M 个义工,每人一件。在这里N 一定是6 的倍数,且N >= M。T-shirt 有6种size, 分别是:XXL, XL, L, M, S, XS。每种size T-shirt 的数量都一样。现在Victor 有一个小问题,因为每个义工都只有2种T-shirt 的size 适合他。
你必须写一个程式来决定是否Victor 可以发给每个义工一件适合他们的T-shirt。假如N 不等于M,那可以有一些T-shirt 剩下。
Input
输入的第一列有一个整数代表以下有几组测试资料。每组测试资料的第一列有2个正整数N, M。N是6的倍数,1 <= N <= 36,代表T-shirt的数目。M ,1 <= M <= 30,代表义工的数目,N >= M。接下来的M列,每列有2个size,分别代表各义工适合的size。
Output
每组测试资料输出一列,输出能否发给每个义工一件适合他们的T-shirt。
Sample Input | Sample Output |
3 18 6 L XL XL L XXL XL S XS MS ML 6 4 S XL LS L XL L XL 6 1 LM | YES NO YES |
[G] Modular Fibonacci
费伯那西数列(0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ......)定义如下:
F 0 = 0
F 1 = 1
F i = F i-1 + F i-2 for i>1
给你n和m,请你写一个程式算出M n = F n mod 2 m。(0 <= n <= 2147483647, 0 <= m < 20)
注意:a mod b的结果为a 除以b 的余数。
Input
输入含有多组测试资料。每组测试资料一列含有2个整数n,m。
Output
对每组测试资料输出一列M n。
Sample Input | Sample Output |
11 7 11 6 7 0 7 1 7 2 7 3 | 89 25 0 1 1 5 |
[H] Children's Game
现在,有许多给小孩子玩的数字游戏,这些游戏玩起来简单,但要创造一个就不是那么容易的了。在这,我们将介绍一种有趣的游戏。
你将会得到N个正整数,你可以将一个整数接在另一个整数之后以制造一个更大的整数。例如,这有4个数字123, 124, 56, 90,他们可以制造下列整数─ 1231245690, 1241235690, 5612312490, 9012312456, 9056124123....等,总共可以组合出24(4!)种数字。但是,9056124123是最大的那一个。
你可能会想这是个简单的事情,但对刚有数字概念小孩来说,这会是个简单的任务吗?
Input
输入含有多组测试资料。
每组测试资料两列,第一列为一个正整数N(N <= 50),下一列将有N 个正整数。
当N=0代表输入结束。请参考Sample Input。
Output
对每一笔测试资料输出一列,输出利用这N个整数可结合成的最大整数。
Sample Input | Sample Output |
4 123 124 56 90 5 123 124 56 90 9 5 9 9 9 9 9 3 12 123 1231 0 | 9056124123 99056124123 99999 123123112 |
Translated by Simon