2017ACM比赛试题

  • 格式:docx
  • 大小:71.35 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2017年计算机ACM编程竞赛

主办:计算机科学与技术学院

时间:2017-11-22 18:00---20:00

地点:计算机学院奋进楼4楼5机房

竞赛规则

1、比赛时间为120分钟,从18:00开始,20:00结束。

2、比赛形式为上机编程,每个小组使用三台电脑,可任选语言,同一小组不同题目可使用不同语言;

3、比赛期间可以使用自己电脑,不可查阅书籍、但禁止查阅个人U盘,禁止使用手机、电脑进行上网查询,禁止使用现有代码,违者取消比赛资格;(正式ACM中是可以携带纸质材料的,但由于本次比赛,有大量题目参考书上例题,所以就不让携带了)

4、比赛期间,如遇到设备问题,可举手示意工作人员;

5、由于机房电脑系统有重启还原功能,比赛期间请勿轻易重启电脑;

6、【重要】比赛结束后,请确认将所要提交文件拷至工作人员U盘,否则成绩无效概不负责。

提交方式

1、创建文件夹,文件夹命名格式为小组号-小组队长-组员1-组员2

2、将每一题的源程序文件夹以题目编号命名,拷贝至上述创建的文件夹中

3、在本文档中每题相应位置附上源码及截图(windows截图键:Alt+Prt sc

sysrq),拷贝至上述创建的文件夹中

4、比赛结束后将上述文件夹拷贝至工作人员U盘中,提交方算完成,提交

完成前请勿重启电脑。

注:本次比赛共14题,满分120分。没有完成题目,但有部分解题步骤者按完成度给分。每道题要有注释。

竞赛题目

1. 青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。输入数据有多组,每组占一行,每行的第一个数是n(2

【要求】

输入数据:输入数据有多组,每组占一行,每行的第一个数是n(2

输出数据:对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。

【样例输入】

3 99 98 97

4 100 99 98 97

【样例输出】

98.00

98.50

2. 使用for循环、while循环和递归写出3个函数来计算给定数列的总和。(5分)

【要求】

输入数据:n(表示数组长度)

一组数字(如:1,2,3,4,5)

输出数据:该组数字的和

3. 编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。(5分)

【要求】

输入数据:n(表示前n位斐波那契数列)

输出数据:n位斐波那契数列

4.实现两个矩阵的相加。(5分)

例如: 2 3 5 3 5 6 5 8 11

3 1 6 + 1 2

4 = 4 3 10

2 6 7 2 4 6 4 10 13

【要求】

输入数据:两个矩阵数据不限

输出数据:这两个矩阵的和

5. 二分查找是一种针对有序集合的查找方法。通过比较查找键K和数组中间元素A[M]来完成查找工作。如果它们相等,算法结束。否则,如果K < A[M],就对数组的前半部分执行该操作,如果K > A[M],则对数组的后半部分执行该操作。(5分)

伪代码:

BinarySearch(A[0..N-1],K)

//实现非递归的折半查找

//输入:一个升序数组A[0…N-1]和一个查找键K

//输出:一个数组元素的下标,该元素等于K;如果没有这样一个元素,则返回-1

i <- 0; r <- n – 1

while i <= r do

m <- [(i + r) / 2]

if K = A[m] return m

else if K < A[m] r <- m – 1

else l <- m + 1

return -1

【要求】

输入数据:一个有序数组和要查找的数字

输出数据:返回查找数字的位置没有则返回-1

【样例输入】

4,5,8,9,10

8

【样例输出】

2

6. 汉诺塔。汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,请用编程实现。(7分)

【要求】

输入数据:无

输出数据:盘子的移动过程

(例如:用abc表示三个柱子第n个盘子 a ---- b)

7. 简单计算机。有一台功能极其简单的计算机,只能计算简单的七种指令A、B、

C、D、E、F;只有两个内存M1、M2;只有三个寄存器R1、R2、R3,六种指令的含义如下:

命令A:将内存M1的数据装到寄存器R1中;

命令B:将内存M2的数据装到寄存器R2中;

命令C:将寄存器R3的数据装到内存M1中;

命令D:将寄存器R3的数据装到内存M2中;

命令E:将寄存器R1中的数据和寄存器R2中的数据相加,结果放到寄存器R3中;

命令F:将寄存器R1中的数据和寄存器R2中的数据相减,结果放到寄存器R3中。

命令G: 输出M1和M2的值

你的任务是:设计一个程序模拟该计算机的运行(10分)

【样例输入】

100 288

ABECEDG

【样列输出】

388 388

8. 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。(10分)

【要求】

输入数据:一组数字

输出数据:最大数字