image

编辑人: 桃花下浅酌

calendar2025-06-15

message9

visits717

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

一、编程题

1、1.统计指定范围里的数
给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。
时间限制:1000
内存限制:65536
输入
第一行1个整数n、,分别表示序列的长度。(0 < n ≤ 10000) 第二行n个正整数,表示序列里的每一个数,每个数小于等于10000000 第三行2个整数L、R,分别表示区间的左端点,区间的右端点。(1 ≤ L ≤ R ≤ 1000000)
输出
输出一个整数,表示序列中大于等于L且小于等于R的数的个数。
样例输入
```
5
11 8 1 10 16
1 10
```
样例输出
```
3
```

参考答案:3

解析:【喵呜刷题小喵解析】:根据题目描述,我们需要统计序列中介于指定区间的数的个数。给定的序列为11 8 1 10 16,区间为[1, 10]。在这个序列中,大于等于1且小于等于10的数有3个,分别是1、8和10。因此,输出结果为3。

2、2.细菌的繁殖与扩散
在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。
时间限制:10000
内存限制:65536
输入
输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。
输出
输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。
样例输入
```
2 1
```
样例输出
```
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 2 4 2 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
```

参考答案:br />```0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 m 0 0 0 00 0 0 0 m 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0```

解析:【喵呜刷题小喵解析】

首先,我们需要理解题目中细菌繁殖和扩散的规则。

1. 细菌每天繁殖10个后代,其中2个分布在原来的单元格中,其余8个均匀分布在其四周相邻的八个单元格中。
2. 细菌寿命仅一天,即第二天细菌及其后代都会消失。

根据这些规则,我们可以进行如下分析:

1. 第1天:在中心位置有m个细菌,根据规则,它们将繁殖出10m-2m=8m个后代,其中2m个在中心位置,其余8m个分布在周围8个单元格。
2. 第2天:中心位置的2m个细菌及其8m个后代,共计10m个细菌全部消失,因为它们都只有一天寿命。所以第2天中心位置细菌数量为0,周围8个单元格的细菌数量为8m/8=m。

由于题目只要求n=1,2,3,4这四种情况,所以我们可以直接写出n=1和n=2时的结果。

对于n=1的情况,中心位置有m个细菌,周围8个单元格细菌数量为0。

对于n=2的情况,中心位置细菌数量为0,周围8个单元格细菌数量为m。

对于n=3和n=4的情况,由于细菌及其后代在第二天都会消失,所以第三天和第四天细菌分布情况和第二天一样,中心位置细菌数量为0,周围8个单元格细菌数量为m。

由于题目要求输出九行九列的矩阵,因此我们在矩阵中心放置0,周围放置m。注意,对于超出培养皿边界的单元格,细菌数量为0。

3、3.错误探测
给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。
你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。
"改变矩阵元素"的操作定义为0变成1或者1变成0。
时间限制:1000
内存限制:65536
输入
输入n + 1行,第1行为矩阵的大小n(0 < n < 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。
输出
如果矩阵符合条件,则输出OK; 如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。 如果不符合以上两条,输出Corrupt。
样例输入
```
样例输入1
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
样例输入2
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
样例输入3
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1
```
样例输出
```
样例输出1
OK
样例输出2
2 3
样例输出3
Corrupt
```

参考答案:对于输入的矩阵,首先检查每一行和每一列的1的数量。如果每一行和每一列的1的数量都是偶数,则输出OK。否则,找到需要改变的一个元素,将其从0变为1或从1变为0,然后再次检查每一行和每一列的1的数量。如果改变一个元素后,每一行和每一列的1的数量都是偶数,则输出需要改变的元素所在的行号和列号。如果无论如何都无法符合条件,则输出Corrupt。

解析:【喵呜刷题小喵解析】:
本题要求判断一个由0和1组成的n*n矩阵是否满足条件:每一行和每一列的1的数量都是偶数。如果不满足条件,则需要在仅改变一个矩阵元素的情况下使其满足条件。

首先,我们需要读取矩阵的大小n和矩阵的每一行的元素。然后,我们可以遍历每一行和每一列,统计1的数量。如果每一行和每一列的1的数量都是偶数,则输出OK。否则,我们需要找到需要改变的一个元素。

为了找到需要改变的一个元素,我们可以遍历矩阵中的每一个元素,将其从0变为1或从1变为0,然后再次统计每一行和每一列的1的数量。如果改变一个元素后,每一行和每一列的1的数量都是偶数,则输出需要改变的元素所在的行号和列号。如果无论如何都无法符合条件,则输出Corrupt。

需要注意的是,由于矩阵的大小n最大为100,因此我们可以使用暴力枚举的方法找到需要改变的一个元素。具体来说,我们可以遍历矩阵中的每一个元素,将其从0变为1或从1变为0,然后统计每一行和每一列的1的数量,判断是否满足条件。如果找到需要改变的一个元素,则输出其所在的行号和列号。如果无论如何都无法符合条件,则输出Corrupt。

由于时间限制为1000,内存限制为65536,因此我们可以使用数组来存储每一行和每一列的1的数量,以便快速统计。同时,我们可以使用变量来记录需要改变的一个元素,以便在找到后直接输出。

需要注意的是,由于矩阵的大小n最大为100,因此我们需要考虑内存限制。具体来说,我们可以使用数组来存储每一行和每一列的1的数量,以便快速统计。但是,由于数组的大小为n*n,因此我们需要考虑内存限制。如果n较大,可能会导致内存不足。因此,在实际应用中,我们需要根据具体情况选择合适的算法和数据结构。

4、4.单词排序
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)
时间限制:10000
内存限制:65536
输入
一行单词序列(长度小于10000),最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。
输出
按字典序输出这些单词,重复的单词只输出一次。
样例输入
```
She wants to go to Peking University to study Chinese
```
样例输出
```
Chinese
Peking
She
University
go
study
to
wants
```

参考答案:br />解题思路:首先,将输入的字符串按空格分割成单词数组。然后,对单词数组进行排序,排序规则按照字典序。最后,遍历排序后的数组,输出每个单词,如果当前单词与前一个单词相同,则跳过。

解析:【喵呜刷题小喵解析】
本题要求将输入的单词序列按照字典序排序并输出,同时要求重复的单词只输出一次。

首先,我们需要将输入的字符串按空格分割成单词数组。可以使用字符串的split()方法,将字符串按照空格分割成一个字符串数组。

然后,我们需要对单词数组进行排序。可以使用Java中的Arrays.sort()方法,传入一个比较器对象,指定排序规则为字典序。

最后,我们需要遍历排序后的数组,输出每个单词。可以使用一个变量记录前一个单词,如果当前单词与前一个单词相同,则跳过。

具体的实现过程如下:

1. 将输入的字符串按空格分割成单词数组;
2. 对单词数组进行排序;
3. 遍历排序后的数组,输出每个单词,如果当前单词与前一个单词相同,则跳过。

在输出时,可以使用Java中的StringBuilder类,将每个单词添加到StringBuilder对象中,最后输出。

需要注意的是,本题要求区分大小写,因此在比较单词时,需要按照字符的ASCII码值进行比较。

5、5.计算好数
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为好数。
例如:
(13)10 = (1101)2,其中1的个数为3,0的个数为1,则此数是好数;
(10)10 = (1010)2,其中1的个数为2,0的个数也为2,则此数不是好数;
(24)10 = (11000)2,其中1的个数为2,0的个数为3,则此数不是好数;
对于给定的N,写程序求出1~N之中(包括1与N)中的好数个数。
时间限制:1000
内存限制:65536
输入
一个整数,题目中的N(N ≤ 1000)
输出
一个整数,表示1~N之中(包括1与N)中的好数个数
样例输入
```
10
```
样例输出
```
5
```

参考答案:为了解决这个问题,我们可以编写一个程序来遍历1到N之间的所有整数,并将每个整数转换为二进制形式。然后,我们计算每个二进制数中1的个数和0的个数,并检查是否满足好数的条件。最后,我们统计好数的个数并输出结果。

解析:【喵呜刷题小喵解析】:
本题要求计算1到N之间(包括1和N)的好数个数。好数是指一个正整数在二进制表示中,1的个数多于0的个数。

为了解决这个问题,我们可以按照以下步骤编写程序:

1. 读取输入N,表示要计算好数的范围。
2. 初始化一个计数器,用于统计好数的个数。
3. 遍历1到N之间的所有整数。
4. 对于每个整数,将其转换为二进制形式。
5. 计算二进制数中1的个数和0的个数。
6. 检查是否满足好数的条件(即1的个数多于0的个数)。
7. 如果满足条件,则将计数器加1。
8. 重复步骤3到7,直到遍历完所有整数。
9. 输出计数器的值,即为1到N之间的好数个数。

需要注意的是,由于N的最大值为1000,我们可以使用整数类型来存储和计算。另外,为了避免重复计算,我们可以使用一个布尔数组来记录每个数是否已经被检查过。但是,由于N的值较小,这种方法在这里并不是必要的。

最后,根据题目要求,我们需要输出好数的个数。因此,在程序执行完毕后,我们只需要输出计数器的值即可。

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

创作类型:
原创

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

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