1、1_1、世纪末的星期(5 分)曾有邪教称 1999 年 12 月 31 日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的 12 月 31 日,如果是星期一则会.有趣的是,任何一个世纪末的年份的 12 月 31 日都不可能是星期一! 于是,“谣言制造商”又修改为星期日1999 年的 12 月 31 日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即 xx99 年)的 12 月 31 日正好是星期天(即星期日)?请给出表示该年份的 4 位整数。1_2、2014 幸运字母(5 分)把 abcd.zABCDL 共 38 个字母组成的序列重复拼接 53 次,得到长度为 2014 的
2、串。接下来删除第 1 个字母(即开头的字母 a),以及第 3 个,第5 个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。注:答案是一个小写字母。2_1、切面条(6 分)一根高筋拉面,中间切一刀,可以得到 2 根面条。如果先对折 1 次,中间切一刀,可以得到 3 根面条。如果连续对折 2 次,中间切一刀,可以得到 5 根面条。那么,连续对折 9 次,中间切一刀,会得到多少面条呢?答案是个整数。2_2、巧排数字(6 分)将 1、2、20 这 20 个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。请求出所有的排法
3、,答案是个整数。3_1、请你帮助小明算一算 40!(符号“!”表示阶乘)(8 分)答案是个整数。3_2、凑一百(8 分)在 1 2 3 4 5 6 7 8 9 九个数字中插入“+” 或“-”符号使得结果为 100,编程实现所有的组合。注:数字的顺序不能改变。如: 123 - 45 - 67 + 89 = 100123456789 = 100答案是个整数。4_1、神秘的三位数(C+,4 分)有这样一个 3 位数,组成它的 3 个数字阶乘之和正好等于它本身。即:abc = a! + b! + c!下面的程序用于搜索这样的 3 位数。请补全缺失的代码。int JC = 1,1,2,6,24,120,
4、720,5040,40320,362880;int i;for(i=100; i=0; n-)int i = 2 * n + 1;x = 2 + (i*i / x);System.out.println(String.format(“%.4f“, );5_1、中奖计算(C+,8 分)某抽奖活动的规则是:每位参与者在纸上写下一个 8 位数的号码。最后通过摇奖的办法随机产生一个 8 位数字。参与者写下的数字中最多有多少个连续位与开奖号码中的相同,则称为中了几个号。例如:小张写的数字是:12345678,而开奖号码是:42347856。则称小张中了 3 个号,因为其中最长的相同连续位是:“234”。
5、如果小张写的是:87654321,则他只中了一个号。下面的代码根据传入的参数,返回中了几个号。其中:a 表示被评价的号码,b 表示摇号产生的数字。请填写缺少的代码。int g(int a, int b)char sa=“00000000“;char sb=“00000000“;int n = 0;int i,j;sprintf(sa,“%8d“,a);sprintf(sb,“%8d“,b);for(i=0; in);/填空sai+j = t;return n;5_2、数制转换(Java,8 分)下列代码把 16 进制表示的串转换为 3 进制表示的串。试完善之。例如:x=“5”则返回:“12”又
6、例如:x=”F”则返回:“120”private static int getRealValue(char x)if(x=0 return 0;public static String jin_zhi_16_3(String x)int n = 0; / 累加真值for(int i=0; ix.length(); i+)n = + getRealValue(x.charAt(i); /填空String t = “;for(;)if(n=0) break;t = (n % 3) + t; ; / 填空return t;6_1、奇怪的算式(10 分)福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式
7、:ABCDE * ? = EDCBA他对华生说:“ABCDE 应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把 ABCDE 所代表的数字写出来。注意:答案是个整数6_2、奇怪的分式(10 分)上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!对于分子、分母都是 19 中的一位数的情况,还有哪些算式可以这样计算呢?请写出所有不同算式的个数(包括题中举例的)。显然,交换分子
8、分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是偶数)。7、棋盘放棋子(10 分)今有 6 x 6 的棋盘格。其中某些格子已经预先放好了棋子。现在要再放上去一些,使得:每行每列都正好有 3 颗棋子。我们希望推算出所有可能的放法。注意:答案是个整数(考虑对称性,肯定是偶数)。8_1、蚂蚁感冒(10 分)长 100 厘米的细长直杆子上有 n 只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米/秒。当两只蚂蚁碰面时,它们会同时掉头
9、往相反的方向爬行。这些蚂蚁中,有 1 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。【数据格式】第一行输入一个整数 n (1 n 50), 表示蚂蚁的总数。接着的一行是 n 个用空格分开的整数 Xi (-100 Xi 100), Xi 的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现 0 值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。要求输出 1 个整数,表示最后感冒蚂蚁的数目。例如,输入:35 -2 8程序应输出:1再例如,输入:5-10 8 -20 1
10、2 25程序应输出:3资源约定:峰值内存消耗 256MCPU 消耗 1000ms。_2、一元多项式加法(10 分)实现两个整系数一元多项式的加法。例如, 对于多项式5*X64*X37*X41 与多项式 50*X24*X, 运算结果为:5*X67*X44*X350*X24*X1。程序要求:键盘输入多项式的各项系数及指数,每项系数及指数为一组数据(系数及指数之一可为零),以0,0结束一个多项式的输入,结果按降幂排列,同类项要合并(指数最大不超过 30)。例如,若输入为: 5,64,3-7,41,00,0,412,4,10,0输出结果应为:5*x6-*x4+4*x3+12*x2+4*x+1.9_1、
11、Playfair 密码变种加密方法(15 分)一种 Playfair 密码变种加密方法如下:首先选择一个密钥单词(称为 pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个 5x5 的方阵中,填入方法如下:1) 首先按行填入密钥串。2) 紧接其后,按字母序按行填入不在密钥串中的字母。3) 由于方阵中只有 25 个位置,最后剩下的那个字母则不需变换。如果密钥为 youandme,则该方阵如下: y o u a nd m e b cf g h i jk l p q rs t v w x在加密一对字母时,如 am,在方阵中找到以这两个字母为顶点的矩形(红色字体):y o u
12、 a nd m e b cf g h i jk l p q rs t v w x这对字母的加密字母为该矩形的另一对顶点,如本例中为 ob。请设计程序,使用上述方法对输入串进行加密,并输出加密后的串。另外有如下规定:1) 一对一对取字母,如果最后只剩下一个字母,则不变换,直接放入加密串中;2) 如果一对字母中的两个字母相同,则不变换,直接放入加密串中;3) 如果一对字母中有一个字母不在正方形中,则不变换,直接放入加密串中;4) 如果字母对出现在方阵中的同一行或同一列,如 df 或 hi,则只需简单对调这两个字母,即变换为 fd 或 ih;5) 如果在正方形中能够找到以字母对为顶点的矩形,假如字母
13、对为 am,则该矩形的另一对顶点字母中,与 a 同行的字母应在前面,在上例中应是 ob;同样若待变换的字母对为ta,则变换后的字母对应为 wo;6) 本程序中输入串均为小写字母,并不含标点、空格或其它字符。解密方法与加密相同,即对加密后的字符串再加密,将得到原始串。要求输入形式如下:从控制台输入两行字符串,第一行为密钥单词(长度小于等于25),第二行为待加密字符串(长度小于等于 50),两行字符串末尾都有一个回车换行符,并且两行字符串均为小写字母,不含其它字符。在标准输出上输出加密后的字符串。例如,若输入:youandmewelcometohangzhou则表示输入的密钥单词为 youandm
14、e,形成的正方形如上所示;待加密字符串为 welcometohangzhou。在正方形中可以找到以第一对字母 we 为顶点的矩形,对应另一对顶点字母为 vb,因此加密后为 vb,同理可找到与字母对 lc,et,oh,ho 对应的顶点字母对。而字母对 om 位于上述正方形中的同一列,所以直接以颠倒这两个字母来加密,即为 mo,字母对 an 同理。字母对 gz 中的 z 不在上述正方形中,因此原样放到加密串中。最后剩一个字母 u 也原样输出。因此输出的结果为:Vbrmmomvugnagzguu9_2、最小公倍数(15 分)为什么 1 小时有 60 分钟,而不是 100 分钟呢?这是历史上的习惯导致
15、。但也并非纯粹的偶然:60 是个优秀的数字,它的因子比较多。事实上,它是 1 至 6 的每个数字的倍数。即 1,2,3,4,5,6 都是可以除尽 60。我们希望寻找到能除尽 1 至 n 的的每个数字的最小整数。不要小看这个数字,它可能十分大,比如 n=100, 则该数为:69720375229712477164533808935312303556800请编写程序,实现对用户输入的 n (n100)求出 1n 的最小公倍数。例如:用户输入:6程序输出:60用户输入:10程序输出:252010、矩阵翻硬币(24 分)小明先把硬币摆成了一个 n 行 m 列的矩阵。随后,小明对每一个硬币分别进行一次
16、Q 操作。对第 x 行第 y 列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转。其中 i 和 j 为任意使操作可行的正整数,行号和列号都是从 1开始。当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹所有硬币均为正面朝上。小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小 M 寻求帮助。聪明的小 M 告诉小明,只需要对所有硬币再进行一次 Q 操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。【数据格式】输入数据包含一行,两个正整数 n m,含义见题目描述。输出一个正整数,表示最开始有多少枚硬币是反面朝上的。【样例输入】2 3【样例输出】1【数据规模】对于 10%的数据,n、m = 103;对于 20%的数据,n、m = 107;对于 40%的数据,n、m = 1015;对于 10%的数据,n、m = 101000(10 的 1000 次方)。资源约定:峰值内存消耗(含虚拟机) 256MCPU 消耗 2000ms