image

编辑人: 流年絮语

calendar2025-12-09

message4

visits778

2022年12月C语言二级答案及解析

一、编程题

1、1.数组逆序重放
将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。
时间限制:1000
内存限制:65536
输入
输入为两行:第一行数组中元素的个数n(1
输出
输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
```
5
8 6 5 4 1
```
样例输出
```
1 4 5 6 8
```

参考答案:

解析:【喵呜刷题小喵解析】首先,我们需要读取输入的两行数据。第一行是数组元素的个数n,第二行是数组的元素。然后,我们可以使用Python的切片功能将数组逆序。在Python中,切片[::-1]表示从后往前取,步长为-1,即逆序。最后,我们使用' '.join(map(str, arr))将逆序后的数组元素以空格分隔,并打印出来。这个算法的时间复杂度是O(n),满足题目要求的时间限制。空间复杂度也是O(n),满足题目要求的内存限制。

2、2.最长最短单词
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。
时间限制:10000
内存限制:65536
输入
一行句子。
输出
两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。
样例输入
```
I am studying Programming language C in Peking University
```
样例输出
```
Programming
I
```
提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

参考答案:

解析:【喵呜刷题小喵解析】本题要求找到句子中的最长单词和最短单词。首先,我们需要将输入的句子进行分割,得到单词列表。然后,我们遍历这个列表,找到最长的单词和最短的单词。在遍历的过程中,我们使用变量max_len和min_len来记录当前找到的最长和最短单词的长度,使用变量long_word和short_word来记录这两个单词。具体的步骤如下:1. 首先,我们使用input()函数获取用户输入的句子,然后使用split()函数将句子分割成单词列表。2. 接着,我们初始化max_len和min_len为第一个单词的长度,long_word和short_word为第一个单词。3. 然后,我们遍历单词列表,对于每个单词,我们检查它的长度是否大于max_len,如果是,则更新max_len和long_word;否则,我们检查它的长度是否小于min_len,如果是,则更新min_len和short_word。4. 最后,我们输出long_word和short_word,即最长单词和最短单词。在上面的代码中,我们使用Python语言编写程序,因为Python语言语法简单,易于理解,同时也非常适合处理字符串和列表等数据结构。

3、3.计算鞍点
给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。 鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
```
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
```
时间限制:1000
内存限制:65536
输入
输入包含一个5行5列的矩阵
输出
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"
样例输入
```
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
```
样例输出
```
4 1 8
```

参考答案:

解析:【喵呜刷题小喵解析】本题要求找到给定5*5矩阵的鞍点。鞍点是指矩阵中某个元素,它是所在行的最大值,并且是所在列的最小值。首先,我们定义一个函数`find_saddle_point`,它接受一个5*5的矩阵作为输入。在函数内部,我们初始化`saddle_point`为None,表示还没有找到鞍点。然后,我们使用两个嵌套的循环遍历矩阵中的每个元素。对于每个元素,我们检查它是否是所在行的最大值和所在列的最小值。具体地,我们使用两个嵌套的循环来遍历矩阵中的每个元素。对于每个元素,我们检查它是否是所在行的最大值。如果是,我们进一步检查它是否是所在列的最小值。如果是,我们找到了一个鞍点,将它的行索引、列索引和值存储在`saddle_point`中,并跳出内层循环。如果在内层循环中找到了鞍点,我们跳出外层循环。最后,如果找到了鞍点,我们返回`saddle_point`,否则返回"not found"。在给定的样例矩阵中,鞍点位于第4行第1列,值为8。因此,输出应为`(4, 1, 8)`。

4、4.病人排队
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
\1. 老年人(年龄 >= 60岁)比非老年人优先看病。
\2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
\3. 非老年人按登记的先后顺序看病。
时间限制:1000
内存限制:65536
输入
第1行,输入一个小于100的正整数,表示病人的个数; 后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
输出
按排好的看病顺序输出病人的ID,每行一个。
样例输入
```
5
021075 40
004003 15
010158 67
021033 75
102012 30
```
样例输出
```
021033
010158
021075
004003
102012
```

参考答案:

解析:【喵呜刷题小喵解析】首先,我们需要读取输入的病人数目和每个病人的信息。然后,我们将每个病人的信息存储为一个三元组,其中第一个元素表示病人是否为老年人(年龄大于等于60),第二个元素表示病人的ID,第三个元素表示病人的年龄。接下来,我们使用Python的内置函数sort()对病人列表进行排序。在排序时,我们使用一个lambda函数作为key参数,该函数返回一个元组,该元组的第一个元素表示病人是否为老年人,第二个元素表示病人的ID(反向存储,以便按照从大到小的顺序排序),第三个元素表示病人的年龄。最后,我们遍历排序后的病人列表,如果病人是老年人,则输出其ID的反向存储,否则直接输出其ID。需要注意的是,在Python中,字符串的切片操作可以使用步长参数,例如str[::-1]表示将字符串反转。在输出时,我们使用print()函数将每个病人的ID输出到单独的一行。

5、5.循环数
若一个n位的数字串满足下述条件,则称其是循环数(cyclic):将这个数字串视为整数(可能带有前导0),并用任意一个 1 到 n 之间(包含1和n)的整数去乘它时, 会得到一个将原数字串首尾相接后,再在某处断开而得到的新数字串所对应的整数。例如,数字 142857 是循环数,因为: 142857 *1 = 142857 142857 *2 = 285714 142857 *3 = 428571 142857 *4 = 571428 142857 *5 = 714285 142857 *6 = 857142。
请写一个程序判断给定的数是否是循环数。
注意:在此题中,输入数字串允许带前导0,且前导0不能被忽略,例如“01”是两位数字串,而“1”是一位数字串。但将数字串转化为整数做乘法运算或比较运算时,可以忽略前导0。
时间限制:10000
内存限制:65536
输入
一行,一个长度在 2 到 60 位之间的数字串。
输出
一个整数,若输入的数字串是循环数,输出1,否则输出0。
样例输入
```
142857
```
样例输出
```
1
```

参考答案:

解析:【喵呜刷题小喵解析】本题要求判断一个数字串是否为循环数。循环数的定义是:将这个数字串视为整数(可能带有前导0),并用任意一个 1 到 n 之间(包含1和n)的整数去乘它时,会得到一个将原数字串首尾相接后,再在某处断开而得到的新数字串所对应的整数。本题需要输入一个长度在2到60之间的数字串,并输出一个整数,若输入的数字串是循环数,输出1,否则输出0。Python程序可以通过定义函数is_cyclic(num_str)来判断数字串是否为循环数。首先,将数字串转换为整数,然后遍历1到n之间的所有整数,计算乘积,将乘积转换为字符串,判断乘积字符串的长度是否为n*i,以及乘积字符串的前n个字符是否等于数字串重复i次后,再在某个位置断开得到的新字符串。如果任何一个条件不满足,则返回0,否则返回1。在主程序中,输入数字串,调用is_cyclic(num_str)函数,输出判断结果。

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

创作类型:
原创

本文链接:2022年12月C语言二级答案及解析

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