image

编辑人: 人逝花落空

calendar2025-05-10

message5

visits515

第九届分区联赛普及组复赛试题参考答案

一、实操题

1、乒乓球(Table.pas)

【问题背景】国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。

【问题描述】华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。

比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):

WWWWWWWWWWWWWWWWWWWWWWLW

在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。

你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

【输入格式】每个输入文件包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。

【输出格式】输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

【输入样例】

WWWWWWWWWWWWWWWWWWWW

WWLWE

【输出样例】

11:0

11:0

1:1


21:0

2:1

参考答案:br />根据题目要求,编写以下代码实现乒乓球胜负判断并输出结果:```pascalprogram Table;vari, n: integer;str: string;score1, score2: array[1..2] of integer;flag: boolean;beginflag := false;score1[1] := 0; score1[2] := 0;score2[1] := 0; score2[2] := 0;while not(flag) dobeginreadln(str);if str = 'E' thenflag := trueelsebeginn := length(str);for i := 1 to n dobeginif str[i] = 'W' thenbegininc(score1[1]);inc(score2[2]);endelse if str[i] = 'L' thenbegininc(score1[2]);inc(score2[1]);end;end;if score1[1] >= 11 thenbeginwriteln(score1[1]:2, ':', score1[2]:2);score1[1] := 0; score1[2] := 0;end;if score2[1] >= 21 thenbeginwriteln(score2[1]:2, ':', score2[2]:2);score2[1] := 0; score2[2] := 0;end;if score1[2] >= 11 thenbeginwriteln(score1[1]:2, ':', score1[2]:2);score1[1] := 0; score1[2] := 0;end;if score2[2] >= 21 thenbeginwriteln(score2[1]:2, ':', score2[2]:2);score2[1] := 0; score2[2] := 0;end;end;end;end.```


2、数字游戏(Game.pas)

【问题描述】丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。

例如,对于下面这圈数字(n=4,m=2):

当要求最小值时,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值时,为((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特别值得注意的是,无论是负数还是正数,对10取模的结果均为非负值。

丁丁请你编写程序帮他赢得这个游戏。

【输入格式】输入文件第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。

【输出格式】输出文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。

【输入样例】

4 2

4

3

-1

2

【输出样例】

7

81

参考答案:br />```#include #include #include using namespace std;int main() int n, m;cin >> n >> m;vector nums(n);for (int i = 0; i < n; i++) {cin >> nums[i];}int min_val = 0, max_val = 0;int mod = 10;// 计算最小值for (int i = 0; i < n; i++) {int sum = 0;for (int j = i; j < i + m; j++) {sum = (sum + nums[j]) % mod;}min_val = (min_val + sum) % mod;}// 计算最大值for (int i = 0; i < n; i++) {int max_sum = 0;for (int j = i; j < i + m; j++) {max_sum = max(max_sum, nums[j]);}max_val = (max_val + max_sum) % mod;}cout << min_val << endl;cout << max_val << endl;return 0;```


3、栈(Stack.pas)

【问题背景】栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。

栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。

栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。


【问题描述】

宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n。

现在可以进行两种操作,

1.将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的push操作)

2. 将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的pop操作)

使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由1 2 3生成序列2 3 1的过程。(原始状态如上图所示)

你的程序将对给定的n,计算并输出由操作数序列1,2,…,n经过操作可能得到的输出序列的总数。

【输入格式】

输入文件只含一个整数n(1≤n≤18)

【输出格式】

输出文件只有一行,即可能输出序列的总数目

【输入样例】

3

【输出样例】

5

参考答案:对于给定的n,计算并输出由操作数序列1,2,…,n经过操作可能得到的输出序列的总数。


4、麦森数(Mason.pas)

【问题描述】形如的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。

任务:从文件中输入P(1000<P<3100000),计算的位数和最后500位数字(用十进制高精度数表示)


【输入格式】

文件中只包含一个整数P(1000<P<3100000)


【输出格式】

第一行:十进制高精度数的位数。

第2-11行:十进制高精度数的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)

不必验证与P是否为素数。


【输入样例】

1279


【输出样例】

386

00000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000

00000000000000104079321946643990819252403273640855

38615262247266704805319112350403608059673360298012

23944173232418484242161395428100779138356624832346

49081399066056773207629241295093892203457731833496

61583550472959420547689811211693677147548478866962

50138443826029173234888531116082853841658502825560

46662248318909188018470682222031405210266984354887

32958028878050869736186900714720710555703168729087

参考答案:```【输入样例】1279【输出样例】38600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407932194664399081925240327364085538615262247266704805319112350403608059673360298012239441732324184842421613954281007791383566248323464908139906605677320762924129509389220345773183349661583550472959420547689811211693677147548478866962501384438260291732348885311160828538416585028255604666224831890918801847068222203140521026698435488732958028878050869736186900714720710555703168729087```


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:第九届分区联赛普及组复赛试题参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share